shithub: riscv

Download patch

ref: 8cbe3772c45431b962971e45581d831772a85947
parent: 0cb4115b8234946b5468f3f0fe29d4c6a94f1026
author: Ori Bernstein <[email protected]'>
date: Fri Sep 6 04:25:21 EDT 2019

Add RFC2822 (email style) formatted dates to to date(1).

--- a/sys/man/1/date
+++ b/sys/man/1/date
@@ -30,6 +30,9 @@
 .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
--- a/sys/src/cmd/date.c
+++ b/sys/src/cmd/date.c
@@ -1,8 +1,17 @@
 #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 @@
 	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 @@
 	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 @@
 				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);