[Rd] [musl] strptime() question
Simon Urbanek
simon.urbanek at r-project.org
Thu Feb 4 18:01:47 CET 2016
On Feb 4, 2016, at 11:20 AM, Alba Pompeo <albapompeo at gmail.com> wrote:
> There is incompatibility between R strptime and musl libc. I posted
> about it on their mailing list, but they need more information I can't
> provide, so I'm forwarding the message here in hope R developers can
> help. Thanks.
>
Generally, it's using the standard tzset() call to set the time zone
http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html
But you may want to post the full config.log and config.h somewhere since parts of the code depend on system capabilities which we don't know for musl.
Cheers,
Simon
>
> ---------- Forwarded message ----------
> From: Rich Felker <dalias at libc.org>
> Date: Thu, Feb 4, 2016 at 2:07 PM
> Subject: Re: [musl] strptime() question
> To: Alba Pompeo <albapompeo at gmail.com>
> Cc: musl at lists.openwall.com, Martin Maechler <maechler at stat.math.ethz.ch>
>
>
> On Thu, Feb 04, 2016 at 01:27:40PM -0200, Alba Pompeo wrote:
>> Hello musl.
>>
>> I've built R on a musl system and "make check-all" fails because R
>> does not get correct timezone information from the system.
>>
>> Here's the error -
>> http://pastebin.com/raw/32D3ngNZ
>>
>> This would be correct,
>>
>>> difftime(
>> + as.POSIXct(c("1970-01-01 00:00:00", "1970-01-01 12:00:00"), tz="EST5EDT"),
>> + as.POSIXct(c("1970-01-01 00:00:00", "1970-01-01 00:00:00"), tz="UTC"))
>> Time differences in hours
>> [1] 5 17
>>
>> but my system gives 4 16 which would suggest that it thinks that
>> there is only 4 hours time difference between UTC and EST5EDT and
>> that is just wrong.
>>
>> The above can be translated to this (slightly more low-level) R code which
>> is already somewhat close to the internal C code of R :
>>
>>> t0 <- strptime("1970-01-01 00:00:00", "%Y-%m-%d %H:%M:%OS", tz="UTC")
>>> as.numeric(t0)
>> [1] 0
>>
>>> t1 <- strptime("1970-01-01 00:00:00", "%Y-%m-%d %H:%M:%OS", tz="EST5EDT")
>>> as.numeric(t1)
>> [1] 18000
>>> 18000 / 3600
>> [1] 5
>>>
>>
>> That's why its 5 hours.
>> R's strptime() is close to the C library strptime(), so think musl
>> specialists should have it easy to do the above from C and find out
>> why you get 4 hour instead of 5 hour difference.
>>
>> I'm certain this isn't a problem with R and I think it's up to me to
>> ensure that your system's C library strptime() function returns the
>> correct numbers for the above example, but I can't understand why it
>> doesn't.
>>
>> Can anyone help here?
>> Thanks a lot.
>
> I think we need to understand how R's strptime function implements its
> tz argument, since this is not part of the POSIX strptime API. It's
> possible that there's a bug in musl here, but it seems equally
> possible that R is doing some dubious hacks with switching timezones.
>
> I'm also wondering what you're expecting from the timezone name
> EST5EDT, which is not generally usable; it's in POSIX TZ form rather
> than zoneinfo, but it lacks any information about when the switch to
> daylight time happens, and the defaults are not correct with respect
> to modern policy.
>
> Rich
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
More information about the R-devel
mailing list