2009-07-04 66 views
20

我在EST時區時間,它使用了MySQL服務器上的NOW()函數來完成。由於我的服務器位於EST,因此存儲的時間位於EST中。當我從iPhone上的應用程序中檢索它時,我需要將其顯示在用戶的正確時區中。我怎麼做?如何將時間轉換爲iPhone設備的時區?

回答

3

我認爲這取決於你的意思是什麼EST - 如果你的意思是東海岸的美國,然後在一般情況下,比UTC 5小時(但不佔夏令時),這應該給你04:00 EST。儘可能避免使用縮寫,因爲它們是不明確的,例如, EST是美洲/底特律和澳大利亞/悉尼的縮寫。使用NSTimeZone initWithName將會提供更精確的結果。

Chronos Time Zone Repository提供了一個很好的可讀XML時區數據庫,真正幫助理解時區如何工作(這一切都相當混亂和可改變)。

3

//你可以用下面的函數來轉換日期的時區,你想

+ (NSDate *) convertDate:(NSDate *) date toTimeZone:(NSString *) timeZoneAbbreviation { 

    NSTimeZone *systemZone = [NSTimeZone systemTimeZone]; 
    NSTimeZone *zoneUTC  = [NSTimeZone timeZoneWithAbbreviation:timeZoneAbbreviation]; 
    NSTimeInterval s  = [zoneUTC secondsFromGMT]; 

    NSTimeZone *myZone  = [NSTimeZone timeZoneWithAbbreviation:[systemZone abbreviationForDate:date]]; 
    NSTimeInterval p  = [myZone secondsFromGMT]; 

    NSTimeInterval i = s-p; 
    NSDate *d = [NSDate dateWithTimeInterval:i sinceDate:date]; 

    return d; 

} 


//Test case **note** cgUtil is the class this method is written thus change it accordingly 

__block NSDate *now = [NSDate date]; 
NSLog(@"Current time:%@", now); 
[[[NSTimeZone abbreviationDictionary] allKeys] enumerateObjectsUsingBlock:^(NSString * abb, NSUInteger idx, BOOL *stop) { 
    NSLog(@"Time zone abb:%@:Time:%@",abb,[cgUtil convertDate:now toTimeZone:abb]); 
}]; 
相關問題