【问题标题】:iOS UIDatePicker time zone issueiOS UIDatePicker 时区问题
【发布时间】:2013-03-21 07:40:52
【问题描述】:

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

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

[datePicker setTimeZone:[NSTimeZone systemTimeZone]];

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

当我在 GMT(而不是 BST)中选择日期时,日期可以正常工作。如果我在 BST(3 月 - 10 月)中选择日期,我会得到晚 1 小时的日期。

这就是我拉日期的方式

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

我查了一下,系统时间肯定是格林威治标准时间,那么为什么 dateOfBirth 的值会返回错误

[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

标签: iphone ios timezone uidatepicker


【解决方案1】:

在获取时间时使用以下内容,让我知道它是否适合您。

[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];

这将始终返回手机的时区。我认为 systemTimeZone 可能被窃听。干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多