]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/cmd/date.c
disk/format: implement long name support
[plan9front.git] / sys / src / cmd / date.c
index fc2ec5af5017e36bd97c8539a42ade35fae1df98..ca0e389fd7e555895e26026a67c7e2ce7694a6f8 100644 (file)
@@ -1,17 +1,54 @@
 #include <u.h>
 #include <libc.h>
 
-int uflg, nflg;
+int uflg, nflg, iflg, tflg;
+
+char*
+isodate(Tm *t)
+{
+       static char c[25]; /* leave room to append isotime */
+       snprint(c, 11, "%04d-%02d-%02d", 
+               t->year + 1900, t->mon + 1, t->mday);
+       return c;
+}
+
+char*
+isotime(Tm *t)
+{
+       int tz;
+       char *c, *d;
+       d = isodate(t);
+       c = d+10;
+       snprint(c, 10, "T%02d:%02d:%02d",
+               t->hour, t->min, t->sec); /* append to isodate */
+       tz = t->tzoff / 60;
+       if(t->tzoff) {
+               /* localtime */
+               if (t->tzoff > 0) {
+                       c[9] = '+';
+               } else {
+                       c[9] = '-';
+                       tz = -tz;
+               }
+               snprint(c+10, 5, "%02d%02d", tz / 60, tz % 60);
+       } else {
+               c[9] = 'Z';
+               c[10] = 0;
+       }
+       return d;
+}
 
 void
 main(int argc, char *argv[])
 {
        ulong now;
-
+       Tm *tm;
        ARGBEGIN{
        case 'n':       nflg = 1; break;
        case 'u':       uflg = 1; break;
-       default:        fprint(2, "usage: date [-un] [seconds]\n"); exits("usage");
+       case 't':       tflg = 1; /* implies -i */
+       case 'i':       iflg = 1; break;
+       default:        fprint(2, "usage: date [-itun] [seconds]\n"); exits("usage");
        }ARGEND
 
        if(argc == 1)
@@ -21,10 +58,15 @@ main(int argc, char *argv[])
 
        if(nflg)
                print("%ld\n", now);
-       else if(uflg)
-               print("%s", asctime(gmtime(now)));
-       else
-               print("%s", ctime(now));
-       
+       else {
+               tm = uflg ? gmtime(now) : localtime(now);
+               if(iflg) {
+                       if(tflg)
+                               print("%s\n", isotime(tm));
+                       else
+                               print("%s\n", isodate(tm));
+               } else
+                       print("%s", asctime(tm));
+       }
        exits(0);
 }