Subject: date to support iso-8601 week-format (patch included)

From: Rami Lehti <[email-masked]>
Date: Fri, 27 Jan 2017 09:19:14 +0200

Hi,

Currently 'date -Iweeks' does not display the ISO 8601 standard's week
format. Neither does it support the ordinal format in that standard.
Attached to this message you will find a patch for this issue. The patch
has been made against latest git master branch. The patch itself is
trivial.

Please consider applying it coreutils.

Kind regards,
Rami Lehti
diff --git a/src/date.c b/src/date.c
index eb7c624..b6d4b21 100644
--- a/src/date.c
+++ b/src/date.c
@@ -52,7 +52,11 @@ enum Time_spec
 
   /* Put these last, since they aren't valid for --rfc-3339.  */
 
-  /* Display date and hour.  */
+  /* Display year and ordinal day number.  */
+  TIME_SPEC_ORDINAL,
+   /* Display year and week number.  */
+  TIME_SPEC_WEEKS,
+   /* Display date and hour.  */
   TIME_SPEC_HOURS,
   /* Display date, hours, and minutes.  */
   TIME_SPEC_MINUTES
@@ -60,14 +64,14 @@ enum Time_spec
 
 static char const *const time_spec_string[] =
 {
-  /* Put "hours" and "minutes" first, since they aren't valid for
-     --rfc-3339.  */
-  "hours", "minutes",
+  /* Put "ordinal", "weeks", "hours" and "minutes" first, since 
+     they aren't valid for --rfc-3339.  */
+  "ordinal", "weeks", "hours", "minutes",
   "date", "seconds", "ns", NULL
 };
 static enum Time_spec const time_spec[] =
 {
-  TIME_SPEC_HOURS, TIME_SPEC_MINUTES,
+  TIME_SPEC_ORDINAL, TIME_SPEC_WEEKS, TIME_SPEC_HOURS, TIME_SPEC_MINUTES,
   TIME_SPEC_DATE, TIME_SPEC_SECONDS, TIME_SPEC_NS
 };
 ARGMATCH_VERIFY (time_spec_string, time_spec);
@@ -151,8 +155,9 @@ Display the current time in the given FORMAT, or set the system date.\n\
       fputs (_("\
   -I[FMT], --iso-8601[=FMT]  output date/time in ISO 8601 format.\n\
                                FMT='date' for date only (the default),\n\
-                               'hours', 'minutes', 'seconds', or 'ns'\n\
-                               for date and time to the indicated precision.\n\
+                               'ordinal', 'weeks', 'hours', 'minutes',\n\
+                               'seconds', or 'ns' for date and time to \n\
+                               the indicated precision.\n\
                                Example: 2006-08-14T02:34:56-06:00\n\
 "), stdout);
       fputs (_("\
@@ -392,7 +397,7 @@ main (int argc, char **argv)
               };
             enum Time_spec i =
               XARGMATCH ("--rfc-3339", optarg,
-                         time_spec_string + 2, time_spec + 2);
+                         time_spec_string + 4, time_spec + 4);
             new_format = rfc_3339_format[i];
             break;
           }
@@ -403,6 +408,8 @@ main (int argc, char **argv)
                 "%Y-%m-%d",
                 "%Y-%m-%dT%H:%M:%S%:z",
                 "%Y-%m-%dT%H:%M:%S,%N%:z",
+                "%Y-%j",
+                "%G-W%V",
                 "%Y-%m-%dT%H%:z",
                 "%Y-%m-%dT%H:%M%:z"
               };