]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/date.c
rio, kbdfs: increase read buffer for high latency kbdfs support
[plan9front.git] / sys / src / cmd / date.c
1 #include <u.h>
2 #include <libc.h>
3
4 static char *day[] = {
5         "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
6 };
7
8 static char *mon[] = {
9         "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
10         "Aug", "Sep", "Oct", "Nov", "Dec"
11 };
12
13 int uflg, nflg, iflg, tflg, mflg;
14
15 char*
16 isodate(Tm *t)
17 {
18         static char c[26]; /* leave room to append isotime */
19         snprint(c, 11, "%04d-%02d-%02d", 
20                 t->year + 1900, t->mon + 1, t->mday);
21         return c;
22 }
23
24 char*
25 isotime(Tm *t)
26 {
27         int tz;
28         char *c, *d;
29         d = isodate(t);
30         c = d+10;
31         snprint(c, 10, "T%02d:%02d:%02d",
32                 t->hour, t->min, t->sec); /* append to isodate */
33         tz = t->tzoff / 60;
34         if(t->tzoff) {
35                 /* localtime */
36                 if (t->tzoff > 0) {
37                         c[9] = '+';
38                 } else {
39                         c[9] = '-';
40                         tz = -tz;
41                 }
42                 snprint(c+10, 6, "%02d:%02d", tz / 60, tz % 60);
43         } else {
44                 c[9] = 'Z';
45                 c[10] = 0;
46         }
47         return d;
48 }
49
50 char *
51 mailtime(Tm *t)
52 {
53         static char c[64];
54         char *sgn;
55         int off;
56
57         sgn = "+";
58         if(t->tzoff < 0)
59                 sgn = "";
60         off = (t->tzoff/3600)*100 + (t->tzoff/60)%60;
61         snprint(c, sizeof(c), "%s, %.2d %s %.4d %.2d:%.2d:%.2d %s%.4d",
62                 day[t->wday], t->mday, mon[t->mon], t->year + 1900,
63                 t->hour, t->min, t->sec, sgn, off);
64         return c;
65 }
66
67 void
68 main(int argc, char *argv[])
69 {
70         ulong now;
71         Tm *tm;
72         ARGBEGIN{
73         case 'n':       nflg = 1; break;
74         case 'u':       uflg = 1; break;
75         case 't':       tflg = 1; /* implies -i */
76         case 'i':       iflg = 1; break;
77         case 'm':       mflg = 1; break;
78         default:        fprint(2, "usage: date [-itunm] [seconds]\n"); exits("usage");
79         }ARGEND
80
81         if(argc == 1)
82                 now = strtoul(*argv, 0, 0);
83         else
84                 now = time(0);
85
86         if(nflg)
87                 print("%ld\n", now);
88         else {
89                 tm = uflg ? gmtime(now) : localtime(now);
90                 if(iflg) {
91                         if(tflg)
92                                 print("%s\n", isotime(tm));
93                         else
94                                 print("%s\n", isodate(tm));
95                 } else if(mflg)
96                         print("%s\n", mailtime(tm));
97                 else
98                         print("%s", asctime(tm));
99         }
100         exits(0);
101 }