Subject: Re: bug#9794: 24.0.90; `format-time-string' no good for %Z

From: Eli Zaretskii <[email-masked]>
Date: Wed, 19 Oct 2011 18:08:59 +0200

> From: Jason Rumney <[email-masked]>
> Cc: Drew Adams <[email-masked]>,  [email-masked]
> Date: Wed, 19 Oct 2011 21:20:06 +0800
> 
> One proposal in that thread was to introduce a new format specifier to
> print the long names (on non-Windows platforms it could output the
> commonly used "Continent/City" format). Another proposal was that %EZ
> could be used, which is especially fitting, for the Windows timezone
> names, which are apparently locale sensitive (which was one of the
> reported problems that led to them being removed in the first place).

I used the %EZ format proposed by Andreas Schwab, and came up with
the Windows-specific patch below.

Paul, would such a change be acceptable by gnulib?

=== modified file 'ChangeLog'
--- ChangeLog	2011-10-18 18:12:53 +0000
+++ ChangeLog	2011-10-19 16:02:14 +0000
@@ -1,3 +1,8 @@
+2011-10-19  Eli Zaretskii  <[email-masked]>
+
+	* lib/strftime.c (strftime_case_) [_WIN32 || __WIN32__]: Provide
+	non-empty time-zone string only for the %EZ format specifier.
+
 2011-10-18  Jan Djärv  <[email-masked]>
 
 	* configure.in (GLIB_REQUIRED, GTK_REQUIRED): Set to 2.10 (Bug#9786).

=== modified file 'lib/strftime.c'
--- lib/strftime.c	2011-03-31 04:24:03 +0000
+++ lib/strftime.c	2011-10-19 15:48:42 +0000
@@ -1302,6 +1302,12 @@ strftime_case_ (bool upcase, STREAM_OR_C
             }
 
 #if HAVE_TZNAME
+#if (defined _WIN32 || defined __WIN32__)
+	  /* Microsoft runtime produces time-zone names that are not
+	     RFC822 compliant, and are also localized.  So we only
+	     produce them for %EZ.  */
+	  if (modifier == L_('E'))
+#endif
           /* The tzset() call might have changed the value.  */
           if (!(zone && *zone) && tp->tm_isdst >= 0)
             zone = tzname[tp->tm_isdst != 0];

=== modified file 'nt/ChangeLog'
--- nt/ChangeLog	2011-09-04 21:52:59 +0000
+++ nt/ChangeLog	2011-10-19 16:02:25 +0000
@@ -1,3 +1,7 @@
+2011-10-19  Eli Zaretskii  <[email-masked]>
+
+	* config.nt (HAVE_TZNAME, HAVE_DECL_TZNAME): Define.
+
 2011-09-04  Paul Eggert  <[email-masked]>
 
 	* config.nt (HAVE_SNPRINTF): New macro.

=== modified file 'nt/config.nt'
--- nt/config.nt	2011-09-26 03:20:03 +0000
+++ nt/config.nt	2011-10-19 15:57:12 +0000
@@ -187,7 +187,14 @@ along with GNU Emacs.  If not, see <http
 
 #undef TM_IN_SYS_TIME
 #undef HAVE_TM_ZONE
-#undef HAVE_TZNAME
+
+/* Define to 1 if you don't have `tm_zone' but do have the external array
+   `tzname'. */
+#define HAVE_TZNAME 1
+
+/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't.
+   */
+#define HAVE_DECL_TZNAME 1
 
 #undef const