2013-06-29 51 views
1

所以我有一个应用程序,其中一些数据是从Web服务返回的,并且相应地调整了UIDatePicker。的日期返回使用以下格式:在12小时内设置24小时制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之前,那么它工作正常。但是,如果日期是店24小时时间后的12,然后将其与以下异常崩溃:

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

我特别不希望强制的时间为12小时格式只是为日期选择器,然后迫使其回进入24小时后,因为在某些当地人可能会用到24小时日期选择器。任何人都知道我可以如何处理这个问题?我无法更改时间存储在数据库中的格式。

谢谢!

+0

您是否检查过'inputDate'以查看它是否具有您期望的值? –

+0

@GradyPlayer问题与该重复的答案是,这是错误的。请参阅下面的答案。这就是为什么我在这个问题的答案中指出需要使用特殊的'en_US_POSIX'语言环境。 – rmaddy

+0

@rmaddy op的格式化程序稍微有点缺陷,但h和h的主要点是相同的。 –

回答

7

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

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

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

此外,由于您使用的是固定格式的工作,你应该日期格式的区域设置为en_US_POSIX

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开发足以说肯定。

+1

日期选择器将返回一个NSDate,它基本上是一个Obj-C封装器,它自引用日期起为'double'秒,并且与格式化表示无关,所以是的,它们是完全独立的。 –

+0

@GradyPlayer:这就是我所希望的:) –

相关问题