2013-03-18 17 views
5

Czy istnieje sposób, aby uzyskać konkretną datę (sposób), w którym rozpoczyna się i kończy dzienna przerwa dla każdego kraju za pomocą C lub Objective-C?Znajdź znacznik czasu DST (Daylight Savings Time) za pomocą Objective-C/C?

W Meksyku czas letni rozpoczyna się w pierwszą niedzielę kwietnia o godzinie 2:00, a kończy się w ostatnią niedzielę października o godzinie 2:00. W wielu systemach POSIX to jest napisane jak

M4.1.0/2,M10.5.0/2 
(Begins: Month 4, 1st Sunday at 02:00AM, Ends: Month 10, last Sunday at 02:00AM) 

wiem, że to jest możliwe, aby wiedzieć, czy czas letni jest obecnie aktywne używając

NSTimeZone* systemTimeZone = [NSTimeZone systemTimeZone]; 
BOOL dstIsOn = [systemTimeZone isDaylightSavingTime]; 

i że jest możliwe, aby uzyskać czas do następnego Daylight Savings zaczyna

NSTimeZone* systemTimeZone = [NSTimeZone systemTimeZone]; 
NSTimeInterval delta = [systemTimeZone daylightSavingTimeOffset]; 

ALE: Jak bym go o znalezienie konkretnego dnia, w którym czas letni zaczyna/kończy?

Czy jest jakiś stół zabójcy, którego nie mogłem znaleźć?

Każda pomoc będzie bardzo ceniona!

+0

FYI, w USA nasz czas letni zmniejszył się o około 3 tygodnie na każdym końcu. –

+0

@CarlVeazey Naprawdę masz rację. Zmieniono kraj na Méjico, ale z chęcią zmieniliby go na Chwalebny naród Kazachstanu, gdyby zaobserwowali DST. – Groot

Odpowiedz

8

Tak, istnieje - można użyć metody [NSTimeZone nextDaylightSavingTimeTransitionAfterDate:]. Zwraca to NSDate, którego można użyć z daylightSavingTimeOffsetForDate, aby ustalić, jakie jest przesunięcie.

Zwykle użyjesz tego do znalezienia następnego offsetu, ale możesz oczywiście uruchomić go więcej niż raz z różnymi datami, aby uzyskać serię nadchodzących zmian w świetle dziennym. Istnieje również wygodna metoda, która zawsze zwróci następne przejście.

+0

Wypróbuje to, dzięki! – Groot

+0

Należy pamiętać, że reguły DST zmieniają się częściej, niż Apple wydaje aktualizacje systemu iOS. Więc daty z metod NSTimeZone mogą być nieaktualne. W naszym projekcie używamy, jak to nazwałeś, "tabeli zabójców", która jest aktualizowana ręcznie. – Jeepston

+0

@Jepepston Tak, zdawałem sobie sprawę z tego ... Nie mam tyle szczęścia, że ​​twój zabójczy stół jest gotowy do zgarnięcia? ;) – Groot

Powiązane problemy