2013-03-18 21 views
5

C'è un modo per ottenere la data specifica (via) quando i davanzali diurni inizia e finisce per ogni paese usando C o Objective-C?Trova il timestamp dell'ora legale (ora legale) utilizzando Objective-C/C?

In Messico, l'ora legale inizia la prima domenica di aprile alle 2:00 e termina l'ultima domenica di ottobre alle 2:00. In molti sistemi POSIX questo è scritto come

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

So che è possibile sapere se l'ora legale è attualmente attivo utilizzando

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

e che è possibile per ottenere il tempo fino alla prossima Daylight Savings inizia

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

MA: Come potrei fare per trovare il giorno specifico che il risparmio di luce del giorno comincia/finisce?

C'è qualche tavolo assassino là fuori che non sono stato in grado di trovare?

Qualsiasi aiuto sarebbe molto apprezzato!

+0

FYI, negli Stati Uniti il ​​nostro ora legale è aumentato di circa 3 settimane a ciascuna estremità. –

+0

@CarlVeazey Hai ragione. Il paese cambiato a Méjico tuttavia lo avrebbe cambiato volentieri a Glorious Nation of Kazakhstan se avesse osservato l'ora legale. – Groot

risposta

8

Sì, c'è - è possibile utilizzare il metodo [NSTimeZone nextDaylightSavingTimeTransitionAfterDate:]. Questo restituisce un NSDate, che è possibile utilizzare con daylightSavingTimeOffsetForDate per stabilire quale sia l'offset.

Normalmente lo utilizzi per trovare l'offset successivo, ma puoi ovviamente eseguirlo più di una volta con date diverse per ottenere una serie di modifiche imminenti all'ora legale. C'è anche un metodo di convenienza nextDaylightSavingTimeTransition che restituirà sempre la transizione successiva.

+0

Lo proveremo, grazie! – Groot

+0

Ricorda che le regole dell'ora legale cambiano più frequentemente, quindi Apple rilascia gli aggiornamenti iOS. Quindi le date dai metodi NSTimeZone potrebbero essere superate. Nel nostro progetto usiamo, come hai chiamato tu, "killer table", che viene aggiornato manualmente. – Jeepston

+0

@Jeepston Sì, lo sapevo ... non sono così fortunato che il tuo tavolo assassino è in palio? ;) – Groot