2011-08-17 17 views
6

Próbuję uzyskać aktualną datę dodając strefę czasową urządzenia, ale jest wyświetlana o 1 godzinę później niż oryginalna data. Chodzi mi o to, że mam problem z DaylightSavingTime. Jak wyłączyć isDaylightSavingTime = FALSE.Jak uzyskać aktualny NSDate sam do symulatora Data? iPhone Sdk

Oto kod, użyłem ..

NSDate *date = [NSDate Date]; 
NSTimeZone *currentTimeZon = [NSTimeZone localTimeZone]; 
if ([currentTimeZon isDaylightSavingTime]) 
{ 
    NSLog(@"East coast is NOT on DT"); 
} 
else 
{ 
    NSLog(@"East coast is on DT"); 

} 
NSTimeInterval timeZoneOffset = [currentTimeZon secondsFromGMTForDate:currentDate]; 
NSTimeInterval gmtTimeInterval = [date timeIntervalSinceReferenceDate] - timeZoneOffset; 
NSDate *gmtDate = [NSDate dateWithTimeIntervalSinceReferenceDate:gmtTimeInterval]; 
NSLog(@"### Announcement gmtDate = %@",gmtDate); 

mam czasu z różnicą 1 godzinę coraz data jest perfact.

+1

Jest tylko jeden NSDate dla każdej chwili (nie ma znaczenia, gdzie jesteś). Jeśli chcesz wydrukować datę w innej strefie czasowej, użyj NSDateFormatter. –

+0

Tak, ale chcę funkcji ogólnej, która automatycznie zmieni się zgodnie ze zmianą strefy czasowej. pojawia się problem, gdy isDaylightSavingTime = FALSE. więc chcę ustawić isDaylightSavingTime = TRUE, ale nie mogę tego zrobić – Sujal

Odpowiedz

1

Użyj NSCalendar, rozumie strefy czasowe, zmiany czasu letniego itp. Jak mówi @albertamg, NSDate to czas od momentu odniesienia w UTC (GMT), nie ma on żadnej innej koncepcji.