UIDatePicker时间
UIDatePicker time
我有一个 UIDatePicker 和一个按钮。当我按下按钮时,我想在日志中显示消息 "Setting a reminder for x",其中 x 是日期选择器显示的时间。
每次按下按钮,记录的时间都比选择器显示的时间晚了整整3个小时(选择器显示的时间就是我现在的时间)。我怀疑这与时区有关。我住在 GMT +2 时区(我猜是 +3,因为我们处于夏令时)。
你知道如何让记录的时间与显示的时间相同吗?
下面是按下按钮时执行的方法。谢谢
- (IBAction)addReminder:(id)sender {
[self.datePicker setTimeZone:[NSTimeZone systemTimeZone]];
NSLog(@"Setting a reminder for %@", self.datePicker.date);
}
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 中不是很清楚,除非您了解其概念。
试试这个...
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);
我有一个 UIDatePicker 和一个按钮。当我按下按钮时,我想在日志中显示消息 "Setting a reminder for x",其中 x 是日期选择器显示的时间。
每次按下按钮,记录的时间都比选择器显示的时间晚了整整3个小时(选择器显示的时间就是我现在的时间)。我怀疑这与时区有关。我住在 GMT +2 时区(我猜是 +3,因为我们处于夏令时)。
你知道如何让记录的时间与显示的时间相同吗?
下面是按下按钮时执行的方法。谢谢
- (IBAction)addReminder:(id)sender {
[self.datePicker setTimeZone:[NSTimeZone systemTimeZone]];
NSLog(@"Setting a reminder for %@", self.datePicker.date);
}
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 中不是很清楚,除非您了解其概念。
试试这个...
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);