From patchwork Tue Jan 22 01:47:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: TAMUKI Shoichi X-Patchwork-Id: 1029025 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-99482-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=linet.gr.jp Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="BnJsStfj"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43kBJH4wL9z9s1l for ; Tue, 22 Jan 2019 12:52:47 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:from:date:to:subject:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=uKYPV qEbLDtGF6wSnXZsX5YfzZfhWVtrmb6jXMMzkOCq01rSU4teaR5Qju2f2xr7GtlQL gIjcrTarqnM10Vf05qthkSA8qdmAJSYY4TuhBln4tcrUHkbaH3gSkm4Lj2WiAz5I QNUibcacPTAhAK7uwzD5KYe5ZpjqhLQ6g3EjuI= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:message-id:from:date:to:subject:in-reply-to :references:mime-version:content-type; s=default; bh=F8CYmqr57Qd 7rUV58/GWpJHOcjE=; b=BnJsStfjWf/QlNcdQNExt58sOZSWuK8FbWc+O8xOETn dxeuJzNwznlEBsC75vobBjk0ybeAg1yesn3waq55hHq9nt2y7BW66iPD2Cn8s2Go iE46pIIJC6ynYFkSG4MJDv6oFgvWy+mtIcUQ0lKFaFKTSPwzExSkXQBmQA/NZITM = Received: (qmail 128458 invoked by alias); 22 Jan 2019 01:52:41 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 128388 invoked by uid 89); 22 Jan 2019 01:52:41 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 spammy=dates, day X-HELO: mail.linet.jp Message-Id: <201901220147.AA04207@tamuki.linet.gr.jp> From: TAMUKI Shoichi Date: Tue, 22 Jan 2019 10:47:29 +0900 To: libc-alpha@sourceware.org Subject: [PATCH v9 1/2] strftime: Set the default width of "%Ey" to 2 [BZ #23758] In-Reply-To: <201901220144.AA04206@tamuki.linet.gr.jp> References: <201901220144.AA04206@tamuki.linet.gr.jp> MIME-Version: 1.0 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. 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. Reviewed-by: Zack Weinberg Reviewed-by: Rafal Luzynski --- NEWS | 8 ++++++++ manual/time.texi | 7 +++++++ time/strftime_l.c | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index d863d80f3a..aec18367a4 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 fd7781c531..03a8a0e10f 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 7ba4179de3..cbe08e7afb 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