2015-09-09 44 views
1

我有一個UIDatePicker和一個按鈕。當我按下按鈕時,我想在日誌中顯示消息「爲x設置提醒」,其中x是由日期選擇器顯示的時間。UIDatePicker時間

每當我按下按鈕,記錄的時間恰好比選取器顯示的時間晚3小時(選取器顯示的時間是我當前的時間)。我懷疑它與時區有關。我住在格林威治標準時間+2時區(我認爲這是+3,因爲我們在夏令時)。

你知道如何讓記錄的時間與顯示的時間相同嗎?

下面是我按下按鈕時執行的方法。謝謝。

- (IBAction)addReminder:(id)sender { 
    [self.datePicker setTimeZone:[NSTimeZone systemTimeZone]]; 
    NSLog(@"Setting a reminder for %@", self.datePicker.date); 
} 
+1

可能重複[如何轉換UTC日期字符串爲本地時間(systemTimeZone)(http://stackoverflow.com/questions/11677520/how-to-convert -utc-date-string-to-local-time-systemtimezone) –

+0

這也可能是模擬器時區而不是你的時區的問題。檢查ios模擬器設置以獲取更多信息 – Devster101

+0

模擬器上的時間與實時相同。我試圖改變iOS模擬器上的區域,結果完全一樣。 –

回答

0

NSDate是某個時刻的簡單表示,它對當地時間一無所知。當你記錄它(實際上,當description)消息被髮送時,它使用GMT來顯示它自己。

UIDatePicker默認情況下使用您的時區(請參閱https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIDatePicker_Class/#//apple_ref/occ/instp/UIDatePicker/timeZone)。

所以,這裏是它如何工作的:

  • 您選擇的DatePicker一段時間,但除非你指定時區的時間是沒有意義的。
  • DatePicker使用您當地的(GMT + 2)時區併爲其創建NSDate
  • 您顯示的是NSDate,由於它對時區一無所知,因此它僅顯示爲GMT。

要顯示您的日期,您應該使用NSDateFormatter。它有時區屬性:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/#//apple_ref/occ/instp/NSDateFormatter/timeZone

您還可以使用NSCalendar及其組件。

您應該閱讀本指南:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DatesAndTimes/DatesAndTimes.html因爲Cocoa中的日期,格式化程序和日曆不是很清楚,除非您瞭解其概念。

0

嘗試......

NSDate *now = [[NSDate alloc] init]; 
[self.datePicker setDate:now]; 
[self.picker setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:2*60*60]]; // GMT+2 Your timeZone 
NSLog(@"Setting a reminder for %@", self.datePicker.date);