UIDatePicker 时区问题

4
我遇到了一个关于UIDatePicker的奇怪问题。我正在尝试制作一个应用程序,使我可以根据其他时区设置提醒。例如,在纽约时间下午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。

1个回答

2
在Swift 4中,您可以通过以下方式更改UIDatePicker的时区:
datePickerMode设置为dateAndTime,以根据时区查看时间。 datePicker.datePickerMode = .dateAndTime 创建一个包含所需时区的常量timeZone。 let timeZone = TimeZone.init(identifier: "America/New_York") 对timeZone进行可选绑定,因为timeZone包含可选值。 guard let newTimeZone = timeZone else {return} 将newTimeZone设置为datePicker.timeZone。 datePicker.timeZone = newTimeZone "最初的回答"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接