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