【问题标题】:UIDatePicker TimeZone issueUIDatePicker 时区问题
【发布时间】:2012-11-09 03:25:52
【问题描述】:

我遇到了UIDatePicker 的一个奇怪问题。我正在尝试制作一个允许我根据其他时区设置提醒的应用程序。 IE。提醒我纽约下午 4 点。

使用UIDatePicker 时,返回的NSDate 对象始终是手机时区中的选定时间,转换为UTC。不考虑将时区或日历属性设置为另一个时区。

这是我最荣耀的代码!

NSLog(@"Date: %@", [datePicker date]);
NSLog(@"DatePicker TimeZone: %@", [datePicker timeZone]);
NSLog(@"Calendar TimeZone: %@", [datePicker.calendar timeZone]);

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

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[cal setTimeZone:timeZone];
NSLog(@"New Calendar TimeZone: %@", [cal timeZone]);

NSLog(@"Updating timezones");
[datePicker setTimeZone:timeZone];
[datePicker setCalendar:cal];


NSLog(@"Date: %@", [datePicker date]);
NSLog(@"DatePicker TimeZone: %@", [datePicker timeZone]);
NSLog(@"Calendar TimeZone: %@", [datePicker.calendar timeZone]);

然后输出...

2012-11-09 14:13:04.834 DatePickerTest[4524:c07] Date: 2012-11-09 03:12:59 +0000
2012-11-09 14:13:04.835 DatePickerTest[4524:c07] DatePicker TimeZone: (null)
2012-11-09 14:13:04.837 DatePickerTest[4524:c07] Calendar TimeZone: Australia/Sydney (GMT+11:00) offset 39600 (Daylight)
2012-11-09 14:13:04.837 DatePickerTest[4524:c07] New Calendar TimeZone: America/New_York (EST) offset -18000
2012-11-09 14:13:04.837 DatePickerTest[4524:c07] Updating timezones
2012-11-09 14:13:04.882 DatePickerTest[4524:c07] Date: 2012-11-09 03:12:59 +0000
2012-11-09 14:13:04.882 DatePickerTest[4524:c07] DatePicker TimeZone: America/New_York (EST) offset -18000
2012-11-09 14:13:04.883 DatePickerTest[4524:c07] Calendar TimeZone: America/New_York (EST) offset -18000

第一行返回的NSDate是正确的,它是悉尼14:12的UTC时间,但是更改时区和日历后,返回的日期仍然是基于悉尼14:12的日期,而不是纽约的 14:13。

【问题讨论】:

    标签: objective-c timezone uidatepicker


    【解决方案1】:

    在 Swift 4 中,您可以通过以下操作更改 UIDatePicker 的时区:

    datePickerMode 设置为dateAndTime,以根据时区查看时间 datePicker.datePickerMode = .dateAndTime

    使用您想要的时区创建常量 timeZone

    let timeZone = TimeZone.init(identifier: "America/New_York")

    进行可选绑定,因为 timeZone 包含可选值。

    guard let newTimeZone = timeZone else {return}

    将 newTimeZone 设置为 datePicker.timeZone

    datePicker.timeZone = newTimeZone

    【讨论】:

      猜你喜欢
      • 2013-03-21
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      相关资源
      最近更新 更多