You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
'%Z' strftime specifier never works with musl #78853
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=<Date2022-01-15.20:08:32.877>created_at=<Date2018-09-14.04:01:29.001>labels= ['3.8', '3.7', 'library']
title="'%Z' strftime specifier never works with musl"updated_at=<Date2022-01-15.20:08:32.876>user='https://github.com/benjaminp'
Traceback (most recent call last):
File "/buildbot/buildarea/3.x.ware-alpine/build/Lib/test/test_time.py", line 273, in test_strptime
time.strptime(strf_output, format)
ValueError: time data '' does not match format '%Z'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/buildbot/buildarea/3.x.ware-alpine/build/Lib/test/test_time.py", line 276, in test_strptime
(format, strf_output))
AssertionError: conversion specifier '%Z' failed with '' input.
The root problem is that time.strptime('%Z', time.gmtime()) won't work—it returns an empty string—even though time.gmtime() will probably have a valid tm_zone field. This is because musl has a safety mechanism where it refuses to process a tm_zone entry unless it produced the string. (See https://git.musl-libc.org/cgit/musl/commit/?id=d78be392e144c338f58ce6a51d82c859126c137d.)
As a partial workaround, I propose we check whether an incoming time.struct_time instance has an tm_zone member equal to tzname[0] or tzname[1], and place one of those global strings into the C-level tm struct if they do match.
New changeset 5633c4f by Benjamin Peterson in branch 'master': bpo-34672: Try to pass the C library's own timezone strings back to it. (GH-9288) 5633c4f
Activity
benjaminp commentedon Sep 14, 2018
With the musl C library, one has failures like this:
======================================================================
FAIL: test_strptime (test.test_time.TimeTestCase)
----------------------------------------------------------------------
The root problem is that time.strptime('%Z', time.gmtime()) won't work—it returns an empty string—even though time.gmtime() will probably have a valid tm_zone field. This is because musl has a safety mechanism where it refuses to process a tm_zone entry unless it produced the string. (See https://git.musl-libc.org/cgit/musl/commit/?id=d78be392e144c338f58ce6a51d82c859126c137d.)
As a partial workaround, I propose we check whether an incoming time.struct_time instance has an tm_zone member equal to tzname[0] or tzname[1], and place one of those global strings into the C-level tm struct if they do match.
benjaminp commentedon Sep 14, 2018
New changeset 5633c4f by Benjamin Peterson in branch 'master':
bpo-34672: Try to pass the C library's own timezone strings back to it. (GH-9288)
5633c4f
benjaminp commentedon Sep 14, 2018
New changeset b93062b by Benjamin Peterson in branch 'master':
bpo-34672: Don't pass NULL to gmtime_r. (GH-9312)
b93062b
zhangyangyu commentedon Oct 28, 2018
New changeset 163eca3 by Xiang Zhang in branch 'master':
bpo-34672: fix a compiler warning in timemodule.c (GH-10176)
163eca3
abalkin commentedon Oct 29, 2018
It looks like this issue has been fixed by #53534. Can this be closed? Should we backport?