Bug 218711
Summary: | strftime man page incorrectly claims that TZ is used | ||
---|---|---|---|
Product: | Documentation | Reporter: | Guy Harris (gharris) |
Component: | man-pages | Assignee: | documentation_man-pages (documentation_man-pages) |
Status: | NEW --- | ||
Severity: | normal | ||
Priority: | P3 | ||
Hardware: | All | ||
OS: | Linux | ||
Kernel Version: | Subsystem: | ||
Regression: | No | Bisected commit-id: | |
Attachments: | signature.asc |
Description
Guy Harris
2024-04-11 19:44:43 UTC
Created attachment 306133 [details] signature.asc On Thu, Apr 11, 2024 at 07:44:43PM +0000, bugzilla-daemon@kernel.org wrote: > https://bugzilla.kernel.org/show_bug.cgi?id=218711 > > Bug ID: 218711 > Summary: strftime man page incorrectly claims that TZ is used > Product: Documentation > Version: unspecified > Hardware: All > OS: Linux > Status: NEW > Severity: normal > Priority: P3 > Component: man-pages > Assignee: documentation_man-pages@kernel-bugs.osdl.org > Reporter: gharris@sonic.net > Regression: No > > The strftime man page says, in the ENVIRONMENT section, that "The environment > variables TZ and LC_TIME are used." > > strftime(), in Linux, does not use the TZ environment variable. It is passed > a > pointer to a struct tm, which contains a time stamp that can reflect either > local time or UTC, and formats a string based on the values in that > structure. > If the structure reflects local time, there is no need for any conversion of > POSIX time to local time, so TZ is not used. If the structure reflects UTC, > the string will reflect UTC, meaning that, again, there is no need for any > conversion to local time, so TZ is not used. > > TZ is *indirectly* used, because, to quote the Single UNIX Specification page > for strftime(), "Local timezone information is used as though strftime() > called > tzset().", and, to quote the Single UNIX Specification page for tzset(), "The > tzset() function shall use the value of the environment variable TZ to set > time > conversion information used by ctime, localtime, mktime, and strftime." > > The reason why strftime is mentioned is that the %Z format specifier is > "Replaced by the timezone name or abbreviation, or by no bytes if no timezone > information exists." In systems in which struct tm includes the tm_zone > member, %Z can use the tm_zone member as the timezone abbreviation, but, in > systems where it does *not* include the tm_zone member, strftime() might, for > example, have to fall back on using the tzname[] array and the tm_isdst > member > to select an element of that array. Hi Guy, Would you mind sending a patch to the mailing list, according to the guidelines? <https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING>. <https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING.d/mail> <https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING.d/patches> It would be wise to CC Paul Eggert <eggert@cs.ucla.edu>. Have a lovely day! Alex > It would be wise to CC Paul Eggert <eggert@cs.ucla.edu>.
I'm not sure why, given that the tzdb newstrftime man page doesn't mention TZ. The tzdb strftime() *code* will use tm_zone if the code is configured to support it, falls back on using tzname[] and tm_isdst if tzname[] is present, and otherwise replace %Z with the empty string, so it's only directly affected by the TZ setting if struct tm doesn't contain tm_zone.
|