summaryrefslogtreecommitdiffstats
path: root/bin/date
diff options
context:
space:
mode:
authorsheldonh <sheldonh@FreeBSD.org>1999-11-10 13:34:39 +0000
committersheldonh <sheldonh@FreeBSD.org>1999-11-10 13:34:39 +0000
commit278d74a6af04e58079d4e40d5c3421fbb9a87c06 (patch)
tree526f3e2ab3a46ba3964b3af20e0fac3412a7c9f4 /bin/date
parent2f18ba64a9479f68ac3189aa75937bf168378309 (diff)
downloadFreeBSD-src-278d74a6af04e58079d4e40d5c3421fbb9a87c06.zip
FreeBSD-src-278d74a6af04e58079d4e40d5c3421fbb9a87c06.tar.gz
Allow the year to be specified with an optional century.
PR: 14472 Reported by: j_guojun@lbl.gov (Jin Guojun)
Diffstat (limited to 'bin/date')
-rw-r--r--bin/date/date.16
-rw-r--r--bin/date/date.c12
2 files changed, 14 insertions, 4 deletions
diff --git a/bin/date/date.1 b/bin/date/date.1
index 8cf4246..f044471 100644
--- a/bin/date/date.1
+++ b/bin/date/date.1
@@ -49,7 +49,7 @@
.Op Fl t Ar minutes_west
.Op Fl v Ns Ar [+|-]val Ns Op ymwdHMS
.Ar ...
-.Op Fl f Ar fmt Ar date | [[[[yy]mm]dd]HH]MM[\&.ss]
+.Op Fl f Ar fmt Ar date | [[[[[cc]yy]mm]dd]HH]MM[\&.ss]
.Op Cm + Ns Ar format
.Sh DESCRIPTION
.Nm Date
@@ -74,7 +74,7 @@ Use
.Ar fmt
as the format string to parse the date provided rather than using
the default
-.Ar [[[[yy]mm]dd]HH]MM[.ss]
+.Ar [[[[[cc]yy]mm]dd]HH]MM[.ss]
format. Parsing is done using
.Xr strptime 3 .
.It Fl j
@@ -168,6 +168,8 @@ a value for setting the system's notion of the current date and time.
The canonical representation for setting the date and time is:
.Pp
.Bl -tag -width Ds -compact -offset indent
+.It Ar cc
+Century (either 19 or 20) prepended to the abbreviated year.
.It Ar yy
Year in abbreviated form (e.g. 89 for 1989, 06 for 2006).
.It Ar mm
diff --git a/bin/date/date.c b/bin/date/date.c
index d699755..4d4c9cd 100644
--- a/bin/date/date.c
+++ b/bin/date/date.c
@@ -175,6 +175,8 @@ main(argc, argv)
}
#define ATOI2(ar) ((ar)[0] - '0') * 10 + ((ar)[1] - '0'); (ar) += 2;
+#define ATOI4(ar) ((ar)[0] - '0') * 1000 + ((ar)[1] - '0') * 100 + \
+ ((ar)[2] - '0') * 10 + ((ar)[3] - '0'); (ar) += 4;
void
setthetime(fmt, p, jflag, nflag)
const char *fmt;
@@ -221,11 +223,16 @@ setthetime(fmt, p, jflag, nflag)
/* if p has a ".ss" field then let's pretend it's not there */
switch (strlen(p) - ((dot != NULL) ? 3 : 0)) {
+ case 12: /* cc */
+ lt->tm_year = -1900 + ATOI4(p);
+ if (lt->tm_year < 0)
+ badformat();
+ goto year_done;
case 10: /* yy */
lt->tm_year = ATOI2(p);
if (lt->tm_year < 69) /* hack for 2000 ;-} */
lt->tm_year += 100;
- /* FALLTHROUGH */
+year_done: /* FALLTHROUGH */
case 8: /* mm */
lt->tm_mon = ATOI2(p);
if (lt->tm_mon > 12)
@@ -286,6 +293,7 @@ usage()
(void)fprintf(stderr, "%s\n%s\n",
"usage: date [-nu] [-d dst] [-r seconds] [-t west] "
"[-v[+|-]val[ymwdHMS]] ... ",
- " [-f fmt date | [[[[yy]mm]dd]HH]MM[.ss]] [+format]");
+ " "
+ "[-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format]");
exit(1);
}
OpenPOWER on IntegriCloud