2015-09-09 49 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);