| Author |
Message
|
kriss68 Poziom 16

Joined: 06 Mar 2007 Posts: 310 Location: Sosnowiec
|
#1
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

|
#
10 Oct 2011 19:13 |
|
|
|
|
|
| Back to top |
|
 |
kriss68 Poziom 16

Joined: 06 Mar 2007 Posts: 310 Location: Sosnowiec
|
#2
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:
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ś:
__env = time_zone; tzset();
I teraz funkcja 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

|
#
08 Jan 2012 23:41 |
|
|
|
|
|
| Back to top |
|
 |
m.ki Poziom 2

Joined: 30 Jan 2012 Posts: 3
|
#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:
#include <stdlib.h>
A w kodzie na początku main.c:
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

|
#
30 Jan 2012 22:34 |
|
|
|
|
|
| Back to top |
|
 |
kriss68 Poziom 16

Joined: 06 Mar 2007 Posts: 310 Location: Sosnowiec
|
#4
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

Joined: 30 Jan 2012 Posts: 3
|
#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

|
#
01 Feb 2012 21:04 |
|
|
|
|
|
| Back to top |
|
 |
kriss68 Poziom 16

Joined: 06 Mar 2007 Posts: 310 Location: Sosnowiec
|
#6
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 |
|
 |