Bug 154804

Summary: strptime '%z' format doesn't work.
Product: [Fedora] Fedora Reporter: David Woodhouse <dwmw2>
Component: glibcAssignee: Jakub Jelinek <jakub>
Status: CLOSED RAWHIDE QA Contact: Brian Brock <bbrock>
Severity: medium Docs Contact:
Priority: medium    
Version: 3CC: drepper, roland
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: 2.3.5-3 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2005-04-28 12:34:56 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description David Woodhouse 2005-04-14 10:53:48 UTC
The '%z' format character isn't functional. Try the following:

#define _XOPEN_SOURCE
#define _BSD_SOURCE
#include <time.h>
#include <stdio.h>

int main(void)
{
	struct tm tm;

	strptime("1113472456 +1000", "%s %z", &tm);

	if (tm.tm_gmtoff == 36000) {
		printf("OK");
		return 0;
	} else {
		printf("Error: tm_gmtoff is %ld\n", tm.tm_gmtoff);
		return 1;
	}
}

The man page states that "In most cases the corresponding fields are parsed, but
no field in tm is changed.". I assume that in the case of at least %F and %z,
the field in tm _should_ be changed.

Comment 1 Jakub Jelinek 2005-04-15 18:52:11 UTC
%z has never been implemented, so I'd say this is mainly a documentation
bug that documents a GNU extension that never existed.
You can see that strptime returns NULL, i.e. an error.
Unlike %z, %Z does not cause a failure, but is simply ignored.
%z perhaps could be implemented, but %Z would be much harder.

Comment 2 Ulrich Drepper 2005-04-27 04:33:01 UTC
I fixed this in upstream glibc.

Comment 3 Jakub Jelinek 2005-04-28 12:34:56 UTC
%z has been implemented in CVS glibc, should appear in glibc-2.3.5-3 and above.