logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak obsłużyć zmianę czasu letniego i zimowego w NMEA GPS?

medicb 16 Maj 2010 03:13 3953 5
REKLAMA
  • #1 8080726
    medicb
    Poziom 28  
    Posty: 1457
    Pomógł: 89
    Ocena: 64
    Z tego co mi wiadomo czas UTC zawarty w NMEA nie koryguje zmian czasu na okres letni i zimowy. W jaki więc sposób zmieniać czas z zimowego na letni i wzajemnie skoro co roku data zmiany czasu jest inna ... ? Czy istnieje jakaś coroczna zależność lub znacznik czasu w jakiejś ramce w standardzie NMEA aby na tej podstawie napisać dobrze kod do obslugi zegara? Znalazłem informacje o ramce $GPZDA ale jeszcze nigdy jej nie widziałem "na żywo", uniklana jak dinozaury.
  • REKLAMA
  • Pomocny post
    #2 8080733
    GSM
    Poziom 25  
    Posty: 543
    Pomógł: 72
    Ocena: 16
    Witam,

    czytując za wikipedią:
    Cytat:

    W całej Unii Europejskiej (dyrektywa UE 2000/84/EC [6]) w ostatnią niedzielę marca o 1:00 czasu uniwersalnego (w zależności od strefy czasowej o 22:00 / 00:00 / 01:00 / 02:00 / 03:00 czasu lokalnego) zegary przestawia się godzinę do przodu, a w ostatnią niedzielę października o 1:00 czasu uniwersalnego (w zależności od strefy czasowej o 23:00 / 01:00 / 02:00 / 03:00 / 04:00 czasu lokalnego), o godzinę do tyłu.


    Pozdrawiam,
    GSM
  • REKLAMA
  • Pomocny post
    #3 8080826
    ksarim
    Poziom 15  
    Posty: 168
    Pomógł: 17
    Ocena: 8
    Precyzując dla naszej strefy czasowej w ostatnią niedzielę marca o godzinie 2:00 przestawiamy zegarki na godzinę 3:00 (czas letni). Natomiast w ostatnią niedzielę października z godziny 3:00 na godzinę 2:00 (czas zimowy).

    Zrobiłem już taki projekt więc dam Ci kilka wskazówek. Po pierwsze program na podstawie daty i godziny UTC będzie musiał określić czy aktualnie obowiązuje czas zimowy czy czas letni i dodać 1 lub 2 godziny do godziny UTC. Oczywiście w przypadku dodawania godziny będziesz musiał również uwzględnić możliwą zmianę daty. Sprawa jest banalna w przypadku miesięcy różnych od marca i października a jeszcze precyzując banalna również dla tych miesięcy do 24 marca i 24 października (wiadomo, że zostało jeszcze co najmniej 7 dni do końca miesiąca i na pewno nie wystąpiła jeszcze ostatnia niedziela miesiąca a więc i zmiana czasu). Sprawa jest trudniejsza dla 7 ostatnich dni miesiąca marca i października. Na podstawie daty musisz określić dzień tygodnia i na tej podstawie oraz na podstawie godziny dla przypadku kiedy trafisz na niedzielę będziesz musiał ustawić odpowiedni czas czy to zimowy czy letni. Na określenie dnia tygodnia na podstawie daty istnieją gotowe algorytmy więc możesz wykorzystać np. ten:
    http://www.algorytm.org/index.php?option=com_content&task=view&id=227&Itemid=28

    Później Twój zegarek może sobie "cykać" i tylko w newralgicznych punktach (od 25 marca i 25 października a przed końcem tych miesięcy) należy sprawdzać czy nie nastąpiła zmiana czasu i ją uwzględniać.

    Teraz pozostaje tylko przełożyć to co napisałem na kod programu. Powodzenia.
  • REKLAMA
  • #4 8082115
    medicb
    Poziom 28  
    Posty: 1457
    Pomógł: 89
    Ocena: 64
    Cenne porady, przydadzą się z pewnością :) tematu jeszcze nie zamykam bo pewnie komuś się przyda. Dam znać gdy zabiorę się za date i czas oraz napiszę co z tego wyszło.
  • REKLAMA
  • #6 9668021
    medicb
    Poziom 28  
    Posty: 1457
    Pomógł: 89
    Ocena: 64
    Na gotowca bym nie liczył, jest troche pisania. Mi się odechciało pisania kodu bo projekt był błachy a błąd przez góra dwie godziny w nocy nie sprawiał mi problemów bo urządzenie miało pracować za dnia. Dwa posty wyżej jest link i wszystko opisane od deski do deski.
REKLAMA