diff options
author | Ori Bernstein <ori@eigenstate.org'> | 2019-09-06 08:25:21 -0700 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org'> | 2019-09-06 08:25:21 -0700 |
commit | 8cbe3772c45431b962971e45581d831772a85947 (patch) | |
tree | 22c6a38d5d67d0093ddb7bee15f045ac9e1f33d0 | |
parent | 0cb4115b8234946b5468f3f0fe29d4c6a94f1026 (diff) | |
download | plan9front-8cbe3772c45431b962971e45581d831772a85947.tar.xz |
Add RFC2822 (email style) formatted dates to to date(1).
-rw-r--r-- | sys/man/1/date | 3 | ||||
-rw-r--r-- | sys/src/cmd/date.c | 35 |
2 files changed, 35 insertions, 3 deletions
diff --git a/sys/man/1/date b/sys/man/1/date index b49d65192..7ad11ffab 100644 --- a/sys/man/1/date +++ b/sys/man/1/date @@ -30,6 +30,9 @@ Report the date as ISO-8601 without time and timezone suffix. .TP .B -t Report the date as ISO-8601 with time and timezone suffix. +.TP +.B -m +Report the date as an email compatible (RFC2822) time stamp. .PP The conversion from Greenwich Mean Time to local time depends on the .B $timezone diff --git a/sys/src/cmd/date.c b/sys/src/cmd/date.c index ca0e389fd..21363dfee 100644 --- a/sys/src/cmd/date.c +++ b/sys/src/cmd/date.c @@ -1,7 +1,16 @@ #include <u.h> #include <libc.h> -int uflg, nflg, iflg, tflg; +static char *day[] = { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", +}; + +static char *mon[] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", + "Aug", "Sep", "Oct", "Nov", "Dec" +}; + +int uflg, nflg, iflg, tflg, mflg; char* isodate(Tm *t) @@ -38,6 +47,23 @@ isotime(Tm *t) return d; } +char * +mailtime(Tm *t) +{ + static char c[64]; + char *sgn; + int off; + + sgn = "+"; + if(t->tzoff < 0) + sgn = ""; + off = (t->tzoff/3600)*100 + (t->tzoff/60)%60; + snprint(c, sizeof(c), "%s, %.2d %s %.4d %.2d:%.2d:%.2d %s%.4d", + day[t->wday], t->mday, mon[t->mon], t->year + 1900, + t->hour, t->min, t->sec, sgn, off); + return c; +} + void main(int argc, char *argv[]) { @@ -48,7 +74,8 @@ main(int argc, char *argv[]) case 'u': uflg = 1; break; case 't': tflg = 1; /* implies -i */ case 'i': iflg = 1; break; - default: fprint(2, "usage: date [-itun] [seconds]\n"); exits("usage"); + case 'm': mflg = 1; break; + default: fprint(2, "usage: date [-itunm] [seconds]\n"); exits("usage"); }ARGEND if(argc == 1) @@ -65,7 +92,9 @@ main(int argc, char *argv[]) print("%s\n", isotime(tm)); else print("%s\n", isodate(tm)); - } else + } else if(mflg) + print("%s\n", mailtime(tm)); + else print("%s", asctime(tm)); } exits(0); |