NSDatePicker 时区怪异

Posted

技术标签:

【中文标题】NSDatePicker 时区怪异【英文标题】:NSDatePicker timezone weirdness 【发布时间】:2011-08-27 01:54:23 【问题描述】:

我的 nib 文件中有一个 NSDatePicker。在代码中,我将它的时区设置为 GMT 日历的时区:

[datePicker setTimeZone:[calendar timeZone]];

我只真正关心我以编程方式填充的日期选择器上的时间(小时、分钟):

NSDate *anyDate = [NSDate date];
        NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit) fromDate:anyDate];
        [components setHour:hours];
        [components setMinute:minutes];
        NSDate *newDate = [calendar dateFromComponents:components];
        [datePicker setDateValue:newDate];

这正确地具有将日期选择器时间设置为我想要的时间的预期效果。因此,如果小时数为 8,分钟数为 30,则日期选择器将显示 8:30。但是,如果我在日期选择器的小时字段中输入 8,它将显示为 3。某处的时区发生了一些奇怪的事情,但我不确定在哪里......

【问题讨论】:

您是否在日期选择器上附加了日期格式化程序? 【参考方案1】:

似乎我不是第一个偶然发现这个问题的人。解决方案,对于那些感兴趣的人,我在这里找到了http://www.cocoabuilder.com/archive/cocoa/305254-nsdatepicker-weirdness-with-time.html。显然,如果您设置日期选择器的时区而不是日历,您会遇到此问题。分辨率是这样的:

[datePicker setTimeZone:[calendar timeZone]];
[datePicker setCalendar:calendar];

【讨论】:

刚刚帮我解决了同样的问题 - 感谢您发布您的发现! 将日期选择器的locale 设置为当前语言环境肯定更简单、更正确。

以上是关于NSDatePicker 时区怪异的主要内容,如果未能解决你的问题,请参考以下文章

WPF DatePicker 是不是允许您指定时区?

关于ElementUI的DatePicker时区问题

如何在没有时区的情况下发送 AngularStrap datepicker 值?

空 NSDatePicker

NSDatePicker 替代品

NSDatePicker - 在更改时获取值