iOS UIDatePicker时区问题

3

我正在遇到一个非常令人沮丧的UIDatePicker时区问题。

当我初始化我的日期选择器时,我将时区设置为系统时区,以允许该应用程序在多个国家使用。

[datePicker setTimeZone:[NSTimeZone systemTimeZone]];

用户选择日期后,保存日期(保存在CoreData中)后,从日期选择器返回的日期是正确的,但我只想获取日期而不是时间,即时间为00:00:00。

当我选择GMT中的日期(而不是BST)时,日期正常工作。如果我在BST(三月至十月)中选择日期,则会将日期返回为比实际时间早1小时。

这是我提取日期的方法

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
NSDate *dateOfBirth = [dateFormatter dateFromString:[dateFormatter stringFromDate:      [dobDatePicker date]]];

我查看了系统时间,确定它是格林尼治标准时间 (GMT),那么为什么出生日期的值会返回错误呢?

例如:

[dobDatePicker date] = "1991-05-30 18:58:16 +0000"
dateOfBirth          = "1991-05-29 23:00:00 +0000"

有什么建议吗?我不想强制设置时区,因为我希望它能根据手机的时区运行。

之所以不关心时间,是因为我将这个日期存储为出生日期,并用它来计算诸如年龄和距离你生日的秒数等值,因此不希望从日期选择器中获取当前时间并存储在CoreData中的日期中。

谢谢


所以我在这里尝试简化事情,只是在格式化程序中使用了一个硬编码日期,并得到了相同的问题:NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; [dateFormatter setDateFormat:@"yyyy-MM-dd"]; NSDate *dateOfBirth = [dateFormatter dateFromString:@"1968-05-31"]; NSLog(@"%@",dateOfBirth);这将输出:2013-03-30 22:56:33.460: 1968-05-30 23:00:00 +0000 - Andrew Kew
1个回答

2
请使用以下内容获取时间,如果可以,请告诉我它是否有效。
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];

这将始终返回手机的时区。我认为systemTimeZone可能存在漏洞。干杯。

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