2016-05-18 99 views
0

我有一個在不同國家使用的應用程序。在我的應用程序中,我正在執行一個簡單的計算,說明當前時間是否晚於下午3點,做點什麼。objective-c創建和比較時間 - 從不同國家運行

這就是我如何創建下午3點。

 NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
    NSDateComponents *dateAttempt = [[NSDateComponents alloc] init]; 
    [dateAttempt setYear:2016]; 
    [dateAttempt setMonth:05]; 
    [dateAttempt setDay:18]; 
    [dateAttempt setHour:15]; 
    [dateAttempt setMinute:00]; 
    NSDate *threePm = [calendar dateFromComponents:dateAttempt]; 
    NSLog(@"%@", dateAttempt); 
    NSLog(@"%@", threePm); 

我在紐約創建應用程序。當我運行上面的代碼,我得到... 2016-05-18 11:17:53.815 x [1312:37272] 2016-05-18 19:00:00 +0000

我想這是有道理的,因爲紐約比UTC落後4個小時。 (現在是我寫這篇文章的時候上午11點)

所以threePm在紐約給我的UTC相當於下午3點,它的工作和預期的一樣。問題是當我在筆記本電腦模擬器上更改時間來模擬在另一個國家時。例如希臘。
如果我將PC上的時間切換到希臘,由於UTC的時間調整不同,上面的代碼給出了不同的結果。

我該怎麼說......無論世界上哪個地方的應用程序正在運行,如果時間晚於下午3點(東部標準時間)...做些什麼?

+1

嘗試'currentCalendar','autoupdatingCurrentCalendar'或設置calendar'的''timeZone'。 – Willeke

+0

添加時區工作...謝謝! – solarissf

回答

1

NSDate存儲絕對時間 - 實際上是UTC時間內固定點的時間偏移量。

NSDateComponents有一個timeZone屬性,用作轉換爲NSDate的基礎,這將默認爲當前時區 - 如您的結果所示。

如果你總是想在紐約下午3點設置此屬性。紐約是標準時區之一:America/New_York;所以你可以使用設置該屬性:

dateAttempt.timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"]; 

NSTimeZone瞭解夏令時和依賴你設定的轉換將翻譯從EST或EDT適當的日期。

HTH