[v7,1/2] strftime: Set the default width of "%Ey" to 2 [BZ #23758]
diff mbox series

Message ID 201901170638.AA04188@tamuki.linet.gr.jp
State New
Headers show
Series
  • strftime: Improve the width of alternative representation for year [BZ #23758][BZ #24096]
Related show

Commit Message

TAMUKI Shoichi Jan. 17, 2019, 6:38 a.m. UTC
In Japanese locales, strftime's alternative year format (%Ey) produces
the year of the current era (Japanese calendar).  A new era typically
begins when a new emperor is enthroned.  The year of the current era
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.

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.
---
 NEWS              | 8 ++++++++
 manual/time.texi  | 7 +++++++
 time/strftime_l.c | 2 +-
 3 files changed, 16 insertions(+), 1 deletion(-)

Comments

Rafal Luzynski Jan. 17, 2019, 6:11 p.m. UTC | #1
17.01.2019 07:38 TAMUKI Shoichi <tamuki@linet.gr.jp> wrote:
> In Japanese locales, strftime's alternative year format (%Ey) produces
> the year of the current era (Japanese calendar).

As I wrote in my previous email, the term "Japanese calendar" may be
incorrect here.

Now I can see that neither of our comments may be correct.  "%Ey" produces
the number of the year within the current era.  It says which (numbered)
year of the current era is now.  Is "nengo" a correct name for this?
Should we maybe drop this parentheses completely, including its content?

I don't quote the rest of your patch here as it looks correct to me,
looking at previous comments from Zack and Paul.  Please rethink this
minor issue in the commit message and/or maybe let's wait for Zack's
or Paul's comment about it and it will be OK for me to commit this.

Regards,

Rafal
TAMUKI Shoichi Jan. 18, 2019, 1:58 p.m. UTC | #2
Hello Rafal,

From: Rafal Luzynski <digitalfreak@lingonborough.com>
Subject: Re: [PATCH v7 1/2] strftime: Set the default width of "%Ey" to 2 [BZ #23758]
Date: Thu, 17 Jan 2019 19:11:53 +0100 (CET)

> > In Japanese locales, strftime's alternative year format (%Ey) produces
> > the year of the current era (Japanese calendar).
> 
> As I wrote in my previous email, the term "Japanese calendar" may be
> incorrect here.

I think that (Japanese numeric era year) would be more appropriate.

> Now I can see that neither of our comments may be correct.  "%Ey" produces
> the number of the year within the current era.  It says which (numbered)
> year of the current era is now.  Is "nengo" a correct name for this?
> Should we maybe drop this parentheses completely, including its content?

Not correct, "nengo" (or "gengo") means "era name" (%EC).  So, We may
rather drop this parentheses completely.

> I don't quote the rest of your patch here as it looks correct to me,
> looking at previous comments from Zack and Paul.  Please rethink this
> minor issue in the commit message and/or maybe let's wait for Zack's
> or Paul's comment about it and it will be OK for me to commit this.

OK, I am going to rethink the minor issue including the quote issue.
I will try to match existing sentences as much as possible.

Regards,
TAMUKI Shoichi

Patch
diff mbox series

diff --git a/NEWS b/NEWS
index cc20102fda4..5152b5ed0ea 100644
--- 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
diff --git a/manual/time.texi b/manual/time.texi
index fd7781c5317..03a8a0e10fc 100644
--- a/manual/time.texi
+++ b/manual/time.texi
@@ -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.
diff --git a/time/strftime_l.c b/time/strftime_l.c
index 7ba4179de3e..cbe08e7afb4 100644
--- a/time/strftime_l.c
+++ b/time/strftime_l.c
@@ -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