在12小时UIDatePicker中设置24小时时间

时间:2013-06-29 20:21:33

标签: ios objective-c ios6

所以我有一个应用程序,其中从Web服务返回一些数据,并相应地调整UIDatePicker。日期以下列格式返回:

12-05-2013 16:05 (dd-mm-yyyy hh:mm)

时间以24小时格式存储,但UIDatePicker为12小时或24小时,具体取决于设备上的设置。数据来自JSON数组,是关键的potdd。我正在设置的日期选择器称为potddatepicker。

NSDateFormatter *inputFormat = [[NSDateFormatter alloc] init];
[inputFormat setDateFormat:@"dd-MM-yyy hh:mm"];
NSDate *inputDate = [inputFormat dateFromString: [jsonObjects objectForKey:@"potdd"]];

NSDate *potdd = inputDate;
[_potddatepicker setDate:potdd];

如果日期在12:00之前设置,那么它可以正常工作。但是,如果日期在12之后的24小时内存储,那么它会崩溃并出现以下异常:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: date'

我并不特别希望将时间强制为12小时格式仅用于日期选择器,然后在它出现时将其强制恢复到24小时,因为在某些本地人中它可能用于24小时日期选择器。谁知道我怎么处理这个?我无法更改时间存储在数据库中的格式。

谢谢!

2 个答案:

答案 0 :(得分:7)

您的错误与日期选择器无关。

您使用错误的日期格式来解析字符串。你需要:

[inputFormat setDateFormat:@"dd-MM-yyyy HH:mm"]; // HH is 24-hour, hh is 12-hour

此外,由于您使用的是固定格式,因此应将日期格式化程序的区域设置设置为en_US_POSIX

答案 1 :(得分:3)

我怀疑您只想在输入格式中使用HH而不是hhHH为24小时,hh为12小时。我怀疑你也想要MM而不是第一个mm。 (MM是两位数的月份说明符; mm是两位数分钟说明符。您不想将分钟设置两次!)

因此格式12-05-2013 16:05的值dd-mm-yyyy hh:mm无效 - 但它对dd-MM-yyyy HH:mm有效。

有关详细信息,请参阅Unicode Date Format Patterns文档 - 基本上您需要注意您的模式与输入数据相匹配。我希望希望选择器的UI设置独立于您的JSON数据输入格式,但我还没有充分了解iOS开发以确定。

相关问题