FAQ | Points | Add... | Recent posts | Search | Register | Log in


[STM32][Newlib] time.h strefy czasowe i czas letni/zimowy


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> ARM Microcontrollers -> [STM32][Newlib] time.h strefy czasowe i czas letni/zimowy
Author
Message
kriss68
Poziom 16
Poziom 16


Joined: 06 Mar 2007
Posts: 310
Location: Sosnowiec

Post#1 Post from the author of the topic 10 Oct 2011 19:13   

[STM32][Newlib] time.h strefy czasowe i czas letni/zimowy


Witam.

Jak ustawić strefę czasową i czas letni/zimowy? Biblioteka newlib wszystko ładnie przelicza tylko jak sprawić by uwzględniała strefę czasową? Niby jest od tego funkcja tzset(); która powinna to ustawić tylko, że jest to funkcja bezparametrowa. I tu pytanie jak to ustawić? Próbowałem też zmienić zmienną środowiskową TZ tylko nawet nie wiem czy ona istnieje skoro nie mam żadnego os. Teoretycznie funkcja putenv("TZ=std 3600"); powinna to zrobić. TZ gdy nie ma czasu letniego/zimowego powinna wyglądać tak: "std offset" tylko, że to wszystko jest dla systemów unixowych a ja żadnego systemu nie mam. Czy da się to w ogóle zrobić czy też muszę napisać swój własny kalendarz uwzględniający strefę czasową i czas letni/zimowy? Dodam tylko, że kompilator mi nic nie wysypuje na tych dwóch funkcjach a czas który dostaje cały czas jest bez uwzględnienia strefy czasowej.
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 10 Oct 2011 19:13   





Back to top
   
kriss68
Poziom 16
Poziom 16


Joined: 06 Mar 2007
Posts: 310
Location: Sosnowiec

Post#2 Post from the author of the topic 08 Jan 2012 23:41   

Re: [STM32][Newlib] time.h strefy czasowe i czas letni/zimowy


Problem rozwiązany :)
"Wystarczy" stworzyć na początku takie oto dwie zmienne:
Code C - [expand]
char time_zone[]="TZ=CET-1CEST,M3.5.0/2,M10.5.0/3";
extern char* __env;

time_zone ma wartość odpowiednią dla polski. Jeśli będą chętni to wyjaśnię co robią poszczególne "znaczki".
Po tym zabiegu na początku main dajemy takie coś:
Code C - [expand]
__env = time_zone;
tzset();

I teraz funkcja
Code C - [expand]
localtime(&tim)

Po podaniu jako tim liczby sekund od 1 stycznia 1970 zwróci nam wskaźnik na piękną strukturę typu tm w której pola będą wypełnione z uwzględnieniem lat przestępnych, strefy czasowej oraz czasu letniego i zimowego.

Oczywiście należy pamiętać o #include <time.h> :D

Testowałem to w TrueStudio jeśli komuś to zadziała z innym kompilatorem (wielce prawdopodobne) to proszę o podzielenie się odpowiednia informacją :)
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 08 Jan 2012 23:41   





Back to top
   
m.ki
Poziom 2
Poziom 2


Joined: 30 Jan 2012
Posts: 3

Post#3 30 Jan 2012 22:34   

Re: [STM32][Newlib] time.h strefy czasowe i czas letni/zimowy


kriss68 wrote:
Testowałem to w TrueStudio jeśli komuś to zadziała z innym kompilatorem (wielce prawdopodobne) to proszę o podzielenie się odpowiednia informacją :)


Niestety, w CooCox nie zadziałało - nie znalazł zmiennej __env. Ale Twój post mnie ukierunkował na poszukiwania - to samo można zrobić bardziej uniwersalnie:

Na początku:
Code C - [expand]
#include <stdlib.h>
 


A w kodzie na początku main.c:
Code C - [expand]
setenv("TZ","CET-1CEST,M3.5.0/2,M10.5.0/3",1);
 


A dalej, jak u Ciebie.
Pozdrowienia,
m.ki
Back to top
   
Google

Google Adsense


Post# 30 Jan 2012 22:34   





Back to top
   
kriss68
Poziom 16
Poziom 16


Joined: 06 Mar 2007
Posts: 310
Location: Sosnowiec

Post#4 Post from the author of the topic 01 Feb 2012 10:44   

Re: [STM32][Newlib] time.h strefy czasowe i czas letni/zimowy


Potwierdzam, w TrueStudio takie coś też działa, nawet nie pomyślałem o tym, że setenv() będzie działać na "zwykłych" procesorkach. Ale dziwne, że CooCox nie znalazł takiej nazwy bo wytargałem ja ze źródeł newliba, czyżby on używał jakiejś innej kompilacji tej biblioteki?
Back to top
   
m.ki
Poziom 2
Poziom 2


Joined: 30 Jan 2012
Posts: 3

Post#5 01 Feb 2012 21:04   

Re: [STM32][Newlib] time.h strefy czasowe i czas letni/zimowy


kriss68 wrote:
Ale dziwne, że CooCox nie znalazł takiej nazwy bo wytargałem ja ze źródeł newliba, czyżby on używał jakiejś innej kompilacji tej biblioteki?

Też mnie to zaciekawiło i zacząłem grzebać w źródłach newliba. Faktycznie, __env jest, ale w części związanej z RDOS - zapewne w CooCox tego nie dokompilowali.
(Zresztą, __env jest tam utożsamione z environ, czyli zmienną wskazującą na zmienne środowiska wg definicji Posix. W CooCox environ jest odnajdywana).

Pozdrowienia,
MKi
Back to top
   
Google

Google Adsense


Post# 01 Feb 2012 21:04   





Back to top
   
kriss68
Poziom 16
Poziom 16


Joined: 06 Mar 2007
Posts: 310
Location: Sosnowiec

Post#6 Post from the author of the topic 01 Feb 2012 22:04   

Re: [STM32][Newlib] time.h strefy czasowe i czas letni/zimowy


U mnie environ jest wskaźnikiem na __env. Odwołuje też, że sposób z setenv() działa w TrueStudio okazało się, że po kolejnym wgraniu rogramu już źle pokazuje godzinę, wróciłem do mojego rozwiązania ;)
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> ARM Microcontrollers -> [STM32][Newlib] time.h strefy czasowe i czas letni/zimowy
Page 1 of 1
Similar topics
[stm32] schemat płytki pod uC STM32 - czy poprawny? (5)
[stm32]Czy programatorem do STM32 można programować ST7/STM8 (6)
[Codesourcery][Newlib] Data Abort Exception w trakcie strtok() (5)
[STM32] Czas reakcji na przerwanie zewnętrzne (3)
TCL UNIX Time=> CZAS POLSKI (1)
[bascom] Automatyczna zmiana czasu (zimowy<=>letni) (5)
PCF8583 - czas letni/zimowy (6)
[stm32] Prosty układ. Prośba o pomoc. STM32 + enkoder (2)
[STM32 ARM Cortex M3] mp3 na STM32 Primer2 (7)

Page generation time: 0.132 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed