date.c - 9base - revived minimalist port of Plan 9 userland to Unix | |
git clone git://git.suckless.org/9base | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
date.c (1207B) | |
--- | |
1 #include <u.h> | |
2 #include <libc.h> | |
3 | |
4 int uflg, nflg, iflg, tflg; | |
5 | |
6 char* | |
7 isodate(Tm *t) | |
8 { | |
9 static char c[25]; /* leave room to append isotime */ | |
10 snprint(c, 11, "%04d-%02d-%02d", | |
11 t->year + 1900, t->mon + 1, t->mday); | |
12 return c; | |
13 } | |
14 | |
15 char* | |
16 isotime(Tm *t) | |
17 { | |
18 int tz; | |
19 char *c, *d; | |
20 d = isodate(t); | |
21 c = d+10; | |
22 snprint(c, 10, "T%02d:%02d:%02d", | |
23 t->hour, t->min, t->sec); /* append to isodate */ | |
24 tz = t->tzoff / 60; | |
25 if(t->tzoff) { | |
26 /* localtime */ | |
27 if (t->tzoff > 0) { | |
28 c[9] = '+'; | |
29 } else { | |
30 c[9] = '-'; | |
31 tz = -tz; | |
32 } | |
33 snprint(c+10, 5, "%02d%02d", tz / 60, tz % 60); | |
34 } else { | |
35 c[9] = 'Z'; | |
36 c[10] = 0; | |
37 } | |
38 return d; | |
39 } | |
40 | |
41 void | |
42 main(int argc, char *argv[]) | |
43 { | |
44 ulong now; | |
45 Tm *tm; | |
46 ARGBEGIN{ | |
47 case 'n': nflg = 1; break; | |
48 case 'u': uflg = 1; break; | |
49 case 't': tflg = 1; /* implies -i */ | |
50 case 'i': iflg = 1; break; | |
51 default: fprint(2, "usage: date [-itun] [seconds]\n"); ex… | |
52 }ARGEND | |
53 | |
54 if(argc == 1) | |
55 now = strtoul(*argv, 0, 0); | |
56 else | |
57 now = time(0); | |
58 | |
59 if(nflg) | |
60 print("%ld\n", now); | |
61 else { | |
62 tm = uflg ? gmtime(now) : localtime(now); | |
63 if(iflg) { | |
64 if(tflg) | |
65 print("%s\n", isotime(tm)); | |
66 else | |
67 print("%s\n", isodate(tm)); | |
68 } else | |
69 print("%s", asctime(tm)); | |
70 } | |
71 exits(0); | |
72 } |