Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
time: in strptime(), make %z accept Z as a time zone [BZ #17886]
In ISO 8601, the timezone can be 'Z' instead of using
digits. 2014-08-17T12:33:12+0000 is often expressed as
2014-08-17T12:33:12Z.
  • Loading branch information
Vincent Bernat authored and Mike Frysinger committed Sep 18, 2015
1 parent 8a44513 commit 900f33e
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 8 deletions.
6 changes: 6 additions & 0 deletions ChangeLog
@@ -1,3 +1,9 @@
2015-09-18 Vincent Bernat <vincent@bernat.im>

[BZ #17886]
* time/strptime_l.c (__strptime_internal): Make %z accept Z as a
valid time zone.

2015-09-17 Mike Frysinger <vapier@gentoo.org>

* sysdeps/unix/sysv/linux/alpha/Makefile (CFLAGS-fdatasync.c): Delete.
Expand Down
10 changes: 5 additions & 5 deletions NEWS
Expand Up @@ -11,11 +11,11 @@ Version 2.23

2542, 2543, 2558, 2898, 4404, 6803, 14341, 14912, 15384, 15786, 15918,
16141, 16296, 16415, 16517, 16519, 16520, 16521, 16734, 16973, 16985,
17118, 17243, 17244, 17787, 17905, 18084, 18086, 18240, 18265, 18370,
18421, 18480, 18525, 18595, 18610, 18618, 18647, 18661, 18674, 18675,
18681, 18757, 18778, 18781, 18787, 18789, 18790, 18795, 18796, 18820,
18823, 18824, 18857, 18863, 18870, 18872, 18873, 18875, 18887, 18921,
18951, 18952, 18961, 18966, 18967, 18970, 18977
17118, 17243, 17244, 17787, 17886, 17905, 18084, 18086, 18240, 18265,
18370, 18421, 18480, 18525, 18595, 18610, 18618, 18647, 18661, 18674,
18675, 18681, 18757, 18778, 18781, 18787, 18789, 18790, 18795, 18796,
18820, 18823, 18824, 18857, 18863, 18870, 18872, 18873, 18875, 18887,
18921, 18951, 18952, 18961, 18966, 18967, 18970, 18977.

* The obsolete header <regexp.h> has been removed. Programs that require
this header must be updated to use <regex.h> instead.
Expand Down
10 changes: 8 additions & 2 deletions time/strptime_l.c
Expand Up @@ -749,13 +749,19 @@ __strptime_internal (rp, fmt, tmp, statep LOCALE_PARAM)
rp++;
break;
case 'z':
/* We recognize two formats: if two digits are given, these
/* We recognize three formats: if two digits are given, these
specify hours. If fours digits are used, minutes are
also specified. */
also specified. 'Z' is equivalent to +0000. */
{
val = 0;
while (ISSPACE (*rp))
++rp;
if (*rp == 'Z')
{
++rp;
tm->tm_gmtoff = 0;
break;
}
if (*rp != '+' && *rp != '-')
return NULL;
bool neg = *rp++ == '-';
Expand Down
10 changes: 9 additions & 1 deletion time/tst-strptime2.c
Expand Up @@ -31,7 +31,8 @@ static bool verbose;
whitespace matching strptime " " format specifier, and
timezone string matching strptime "%z" format specifier.
Note that a valid timezone string contains the following fields:
Note that a valid timezone string is either "Z" or contains the
following fields:
Sign field consisting of a '+' or '-' sign,
Hours field in two decimal digits, and
optional Minutes field in two decimal digits.
Expand Down Expand Up @@ -155,6 +156,13 @@ do_test (void)
expect = LONG_MAX;
result |= compare (buf, expect, nresult);

/* Create and test input string with "Z" input (valid format).
Expect tm_gmtoff of 0. */

sprintf (buf, "%s Z", dummy_string);
expect = 0;
result |= compare (buf, expect, nresult);

/* Create and test input strings with sign and digits:
0 digits (invalid format),
1 digit (invalid format),
Expand Down

0 comments on commit 900f33e

Please sign in to comment.