* date(1) cleanup
@ 2020-06-14 18:25 ori
2020-06-14 21:46 ` [9front] " sirjofri
0 siblings, 1 reply; 3+ messages in thread
From: ori @ 2020-06-14 18:25 UTC (permalink / raw)
To: 9front
Simplify using tmdate(2). Also add '-f' for custom formats,
since it costs almost nothing.
diff -r b07da9e4e4d2 sys/man/1/date
--- a/sys/man/1/date Sun Jun 14 09:33:32 2020 -0700
+++ b/sys/man/1/date Sun Jun 14 11:23:56 2020 -0700
@@ -4,8 +4,12 @@
.SH SYNOPSIS
.B date
[
-.I option
-] [
+.I -u
+]
+[
+.I -nitm | -f fmt
+]
+[
.I seconds
]
.br
@@ -33,6 +37,12 @@
.TP
.B -m
Report the date as an email compatible (RFC2822) time stamp.
+.TP
+.B -f
+.I fmt
+Report the date using a
+.IR tmdate (1)
+compatible format.
.PP
The conversion from Greenwich Mean Time to local time depends on the
.B $timezone
diff -r b07da9e4e4d2 sys/src/cmd/date.c
--- a/sys/src/cmd/date.c Sun Jun 14 09:33:32 2020 -0700
+++ b/sys/src/cmd/date.c Sun Jun 14 11:23:56 2020 -0700
@@ -1,101 +1,57 @@
#include <u.h>
#include <libc.h>
-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)
+void
+usage(void)
{
- static char c[26]; /* 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, 6, "%02d:%02d", tz / 60, tz % 60);
- } else {
- c[9] = 'Z';
- c[10] = 0;
- }
- 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;
+ fprint(2, "usage: date [-itunm] [seconds]\n");
+ exits("usage");
}
void
main(int argc, char *argv[])
{
- ulong now;
- Tm *tm;
+ char *fmt;
+ vlong now;
+ Tzone *tz;
+ Tm tm;
+
+ now = 0;
+ tz = nil;
+ fmt = "W MMM _D hh:mm:ss ZZZ YYYY";
+ tmfmtinstall();
+
ARGBEGIN{
- case 'n': nflg = 1; break;
- case 'u': uflg = 1; break;
- case 't': tflg = 1; /* implies -i */
- case 'i': iflg = 1; break;
- case 'm': mflg = 1; break;
- default: fprint(2, "usage: date [-itunm] [seconds]\n"); exits("usage");
+ case 'n': nflg = 1; break;
+ case 'u': uflg = 1; break;
+ case 't': fmt = "YYYY-MM-DDThh:mm:ssZZ"; break;
+ case 'i': fmt = "YYYY-MM-DD"; break;
+ case 'm': fmt = "W, DD MMM YYYY hh:mm:ss Z"; break;
+ case 'f': fmt = EARGF(usage()); break;
+ default: usage();
}ARGEND
- if(argc == 1)
- now = strtoul(*argv, 0, 0);
- else
+ switch(argc) {
+ case 0:
now = time(0);
+ break;
+ case 1:
+ now = strtoll(argv[0], nil, 0);
+ break;
+ default:
+ usage();
+ break;
+ }
+
+ if(!uflg && (tz = tmgetzone("local")) == nil)
+ sysfatal("timezone: %r");
+ if(tmtime(&tm, now, tz) == nil)
+ sysfatal("now: %r");
if(nflg)
- print("%ld\n", now);
- else {
- tm = uflg ? gmtime(now) : localtime(now);
- if(iflg) {
- if(tflg)
- print("%s\n", isotime(tm));
- else
- print("%s\n", isodate(tm));
- } else if(mflg)
- print("%s\n", mailtime(tm));
- else
- print("%s", asctime(tm));
- }
+ print("%lld\n", tm.abs);
+ else
+ if(print("%τ\n", tmfmt(&tm, fmt)) == -1)
+ sysfatal("%r");
exits(0);
}
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [9front] date(1) cleanup
2020-06-14 18:25 date(1) cleanup ori
@ 2020-06-14 21:46 ` sirjofri
2020-06-15 6:04 ` ori
0 siblings, 1 reply; 3+ messages in thread
From: sirjofri @ 2020-06-14 21:46 UTC (permalink / raw)
To: 9front
Hello,
I think I found some typo in this diff:
Isn't it tmdate(2) instead of tmdate(1)?
Also I can't find the -f flag in the usage output.
Haven't applied the patch yet, I'm only looking at the diff.
Thank you
sirjofri
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [9front] date(1) cleanup
2020-06-14 21:46 ` [9front] " sirjofri
@ 2020-06-15 6:04 ` ori
0 siblings, 0 replies; 3+ messages in thread
From: ori @ 2020-06-15 6:04 UTC (permalink / raw)
To: sirjofri, 9front
> Hello,
>
> I think I found some typo in this diff:
>
> Isn't it tmdate(2) instead of tmdate(1)?
>
> Also I can't find the -f flag in the usage output.
>
> Haven't applied the patch yet, I'm only looking at the diff.
>
> Thank you
> sirjofri
Thanks, updated:
diff -r 6055167dc76a sys/man/1/date
--- a/sys/man/1/date Mon Jun 15 00:12:57 2020 +0200
+++ b/sys/man/1/date Sun Jun 14 23:03:49 2020 -0700
@@ -4,8 +4,12 @@
.SH SYNOPSIS
.B date
[
-.I option
-] [
+.I -u
+]
+[
+.I -nitm | -f fmt
+]
+[
.I seconds
]
.br
@@ -33,6 +37,12 @@
.TP
.B -m
Report the date as an email compatible (RFC2822) time stamp.
+.TP
+.B -f
+.I fmt
+Report the date using a
+.IR tmdate (2)
+compatible format.
.PP
The conversion from Greenwich Mean Time to local time depends on the
.B $timezone
diff -r 6055167dc76a sys/src/cmd/date.c
--- a/sys/src/cmd/date.c Mon Jun 15 00:12:57 2020 +0200
+++ b/sys/src/cmd/date.c Sun Jun 14 23:03:49 2020 -0700
@@ -1,101 +1,60 @@
#include <u.h>
#include <libc.h>
-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)
+void
+usage(void)
{
- static char c[26]; /* 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, 6, "%02d:%02d", tz / 60, tz % 60);
- } else {
- c[9] = 'Z';
- c[10] = 0;
- }
- 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;
+ fprint(2, "usage: date [-itunm] [-f fmt] [seconds]\n");
+ exits("usage");
}
void
main(int argc, char *argv[])
{
- ulong now;
- Tm *tm;
+ int nflg, uflg;
+ char *fmt;
+ vlong now;
+ Tzone *tz;
+ Tm tm;
+
+ now = 0;
+ nflg = 0;
+ uflg = 0;
+ tz = nil;
+ fmt = "W MMM _D hh:mm:ss ZZZ YYYY";
+ tmfmtinstall();
+
ARGBEGIN{
- case 'n': nflg = 1; break;
- case 'u': uflg = 1; break;
- case 't': tflg = 1; /* implies -i */
- case 'i': iflg = 1; break;
- case 'm': mflg = 1; break;
- default: fprint(2, "usage: date [-itunm] [seconds]\n"); exits("usage");
+ case 'n': nflg = 1; break;
+ case 'u': uflg = 1; break;
+ case 't': fmt = "YYYY-MM-DDThh:mm:ssZZ"; break;
+ case 'i': fmt = "YYYY-MM-DD"; break;
+ case 'm': fmt = "W, DD MMM YYYY hh:mm:ss Z"; break;
+ case 'f': fmt = EARGF(usage()); break;
+ default: usage();
}ARGEND
- if(argc == 1)
- now = strtoul(*argv, 0, 0);
- else
+ switch(argc) {
+ case 0:
now = time(0);
+ break;
+ case 1:
+ now = strtoll(argv[0], nil, 0);
+ break;
+ default:
+ usage();
+ break;
+ }
+
+ if(!uflg && (tz = tmgetzone("local")) == nil)
+ sysfatal("timezone: %r");
+ if(tmtime(&tm, now, tz) == nil)
+ sysfatal("now: %r");
if(nflg)
- print("%ld\n", now);
- else {
- tm = uflg ? gmtime(now) : localtime(now);
- if(iflg) {
- if(tflg)
- print("%s\n", isotime(tm));
- else
- print("%s\n", isodate(tm));
- } else if(mflg)
- print("%s\n", mailtime(tm));
- else
- print("%s", asctime(tm));
- }
+ print("%lld\n", tm.abs);
+ else
+ if(print("%τ\n", tmfmt(&tm, fmt)) == -1)
+ sysfatal("%r");
exits(0);
}
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-06-15 6:04 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-14 18:25 date(1) cleanup ori
2020-06-14 21:46 ` [9front] " sirjofri
2020-06-15 6:04 ` ori
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).