How to set timezone for localtime()
Giuseppe Modugno
giuseppe.modugno.loqed@gmail.com
Thu Apr 5 10:44:00 GMT 2018
Il 31/03/2018 08:45, Brian Inglis ha scritto:
> On 2018-03-31 00:16, Giuseppe Modugno wrote:
>> I have the number of seconds since epoch 1970, in UTC. I'd like to convert
>> it into broken-down time (year, month, day, hours, ...). I live in Italy
>> and I need the broken-down in *local* time, so taking into account timezone
>> (+1 hour) *and* daylight savings.
>>
>> My platform is a Cortex-M3 MCU from NXP. I'm using MCUXpresso IDE to build
>> my project and I'm using newlib-nano variant.
>>
>> I looked at the code and it seems there is some instructions in localtime()
>> that take into account the timezone. However I don't know how to set
>> Italian timezone on my platform (somewhere I read I can set TZ environment
>> variable... but I don't have an environment at all).
>>
>> Any help?
> Does your platform at least support putenv(3)?
> If so, then on a hosted platform with the latest zoneinfo package, you can run:
>
> $ tail -1 /usr/share/zoneinfo/Europe/Rome
> CET-1CEST,M3.5.0,M10.5.0/3
>
> which shows the encoded EU rules for that time zone: STD CET == UTC+1 with
> opposite POSIX sign, DST CEST == UTC+2 from March last Sunday at 02.00, until
> October last Sunday at 03.00.
> In your program:
>
> #include <stdlib.h>
> putenv("TZ=CET-1CEST,M3.5.0,M10.5.0/3");
> #include <time.h>
> tzset();
> time_t tt = time(&tt);
> struct tm *stmp = localtime(&tt);
>
> should give you the correct broken down time if tzset(3) and localtime(3)
> support using TZ.
Good suggestione, it works well.
Now I have another similar question. I have to convert a struct tm in
UTC to time_t, but I set TZ to Italy timezone. Is there a function that
makes this convertion without checking current timezone configured in TZ?
More information about the Newlib
mailing list