]> sourceware.org Git - glibc.git/commitdiff
strftime: Set the default width of "%Ey" to 2 [BZ #23758]
authorTAMUKI Shoichi <tamuki@linet.gr.jp>
Thu, 24 Jan 2019 14:00:53 +0000 (23:00 +0900)
committerTAMUKI Shoichi <tamuki@linet.gr.jp>
Thu, 24 Jan 2019 14:00:53 +0000 (23:00 +0900)
In Japanese locales, strftime's alternative year format (%Ey) produces
a year numbered within a time period called an _era_.  A new era
typically begins when a new emperor is enthroned.  The result of "%Ey"
is therefore usually a one- or two-digit number.

Many programs that display Japanese era dates assume that the era year
is two digits wide.  To improve how these programs display dates
during the first nine years of a new era, change "%Ey" to pad one-
digit numbers on the left with a zero.  This change applies to all
locales.  It is expected to be harmless for other locales that use the
alternative year format (e.g. lo_LA and th_TH, in which "%Ey" produces
the year of the Buddhist calendar) as those calendars' year numbers
are already more than two digits wide, and this is not expected to
change.

This change needs to be in place before 2019-05-01 CE, as a new era is
scheduled to begin on that date.

Reviewed-by: Zack Weinberg <zackw@panix.com>
Reviewed-by: Rafal Luzynski <digitalfreak@lingonborough.com>
ChangeLog:

[BZ #23758]
* manual/time.texi (strftime): Document "%Ey".
* time/strftime_l.c (__strftime_internal): Set the default width
padding with zero of "%Ey" to 2.

ChangeLog
NEWS
manual/time.texi
time/strftime_l.c

index af78b366f5e61b5853280f963c3d6ff2cd3cd5eb..64ed08986700e95d057c7832deb15dc667e78d8c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2019-01-24  TAMUKI Shoichi  <tamuki@linet.gr.jp>
+
+       [BZ #23758]
+       * manual/time.texi (strftime): Document "%Ey".
+       * time/strftime_l.c (__strftime_internal): Set the default width
+       padding with zero of "%Ey" to 2.
+
 2019-01-24  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
        * support/xsigstack.c (MAP_NORESERVE, MAP_STACK): Define if they
diff --git a/NEWS b/NEWS
index d863d80f3a064031f4facd0cdfad7de677c64acc..aec18367a4ae00df00b0c8cb0ac8442568311569 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -52,6 +52,14 @@ Major new features:
     - C-SKY ABIV2 soft-float little-endian
     - C-SKY ABIV2 hard-float little-endian
 
+* strftime's default formatting of a locale's alternative year (%Ey)
+  has been changed to zero-pad the year to a minimum of two digits,
+  like "%y".  This improves the display of Japanese era years during
+  the first nine years of a new era, and is expected to be harmless
+  for all other locales (only Japanese locales regularly have
+  alternative year numbers less than 10).  Zero-padding can be
+  overridden with the '_' or '-' flags (which are GNU extensions).
+
 Deprecated and removed features, and other changes affecting compatibility:
 
 * The glibc.tune tunable namespace has been renamed to glibc.cpu and the
index fd7781c531715f26f93f4caf96619f29d9f6f839..03a8a0e10fce1e1e46503e02e157e25249bbdd4e 100644 (file)
@@ -1568,6 +1568,13 @@ The preferred time of day representation for the current locale.
 The year without a century as a decimal number (range @code{00} through
 @code{99}).  This is equivalent to the year modulo 100.
 
+If the @code{E} modifier is specified (@code{%Ey}), instead produces
+the year number according to a locale-specific alternative calendar.
+Unlike @code{%y}, the number is @emph{not} reduced modulo 100.
+However, by default it is zero-padded to a minimum of two digits (this
+can be overridden by an explicit field width or by the @code{_} and
+@code{-} flags).
+
 @item %Y
 The year as a decimal number, using the Gregorian calendar.  Years
 before the year @code{1} are numbered @code{0}, @code{-1}, and so on.
index 7ba4179de3e89078151e537b8c4107a41f5166da..cbe08e7afb4eba570e79e747c3d4b053fe5f05e8 100644 (file)
@@ -1294,7 +1294,7 @@ __strftime_internal (CHAR_T *s, size_t maxsize, const CHAR_T *format,
              if (era)
                {
                  int delta = tp->tm_year - era->start_date[0];
-                 DO_NUMBER (1, (era->offset
+                 DO_NUMBER (2, (era->offset
                                 + delta * era->absolute_direction));
                }
 #else
This page took 0.074675 seconds and 5 git commands to generate.