UIDatePicker TimeZone问题

问题描述 投票:3回答:1

我遇到了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个回答
2
投票

在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

© www.soinside.com 2019 - 2024. All rights reserved.