Skip to content

Commit

Permalink
strftime: Set the default width of "%Ey" to 2 [BZ #23758]
Browse files Browse the repository at this point in the history
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 <[email protected]>
Reviewed-by: Rafal Luzynski <[email protected]>

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.
  • Loading branch information
tamuki committed Jan 24, 2019
1 parent 3367acd commit b22eed3
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 1 deletion.
7 changes: 7 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
2019-01-24 TAMUKI Shoichi <[email protected]>

[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 <[email protected]>

* support/xsigstack.c (MAP_NORESERVE, MAP_STACK): Define if they
Expand Down
8 changes: 8 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 7 additions & 0 deletions manual/time.texi
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion time/strftime_l.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit b22eed3

Please sign in to comment.