将NSDate设置为24 – 12小时xcode格式的“TimePicker”

我正在使用一些NSDate对象,而且,我用我的iPhone 24小时的格式,所以当我testing我的应用程序,一切都很顺利,但是,我的一个朋友尝试了他的iPhone上的应用程序,但他用了12小时格式,经过一些研究,我发现问题是date,我不知道为什么我使用这个设置dateselect器和时间select器,所以我从数据库中读取一些值(是的,我已经检查了值,它们是正确的,这不是一个价值问题),所以所有这些数据被格式化,并作为一个NSDate放在一起,然后,我设置dateselect器和时间select器与我刚刚创build的date

NSDateFormatter *currentDate = [[[NSDateFormatter alloc] init] autorelease]; [currentDate setDateFormat:@"yyyy-MM-dd HH:mm"]; NSDate * startDate =[currentDate dateFromString:[NSString stringWithFormat:@"%d-%d-%d %d:%d",yearVal,monthVal,dayVal,hourVal,minVal]]; [datePicker setDate:startDate]; [timePicker setDate:startDate]; 

所以,yearVal,monthVal,dayVal,hourVal,minVal都是NSIntegers …事情就是,如果你的iPhone / iPod在你的时钟设置中使用了24小时,那么它是完美的,但是如果你使用12小时制,它崩溃并显示此错误消息

 > *** Assertion failure in -[UIDatePickerView _updateBitsForDate:forced:andReload:animateIfNeeded:], /SourceCache/UIKit/UIKit-1914.85/UIDatePicker.m:1200 2012-06-29 > 01:19:15.753 MyApp[1215:707] *** Terminating app due to uncaught > exception 'NSInternalInconsistencyException', reason: 'Invalid > parameter not satisfying: date' > *** First throw call stack: (0x3710188f 0x34e06259 0x37101789 0x379403a3 0x31042807 0x30f616c5 0x30f61563 0x31042385 0xf48ef 0xf7bd3 > 0x30e0ec8b 0x30e1b1e9 0x30e1b059 0x30e1af3f 0x30e1a7c1 0x30e1a503 > 0x30e0eaff 0x30e0e7d5 0xdd945 0x30e8793d 0x30f01627 0x37972933 > 0x370d5a33 0x370d5699 0x370d426f 0x370574a5 0x3705736d 0x33816439 > 0x30e03cd5 0xd4cbb 0xd4c60) terminate called throwing an > exception(gdb) 

所以请,如果你有任何想法如何解决这个问题,我将不胜感激您的帮助

哦,我读过HH以24小时格式返回小时数,好吧,我所有的应用都使用HH,所以我不明白为什么我在打印的某些NSLog中一直在看“am”或“pm”debugging

提前致谢

哦,对不起,我几乎忘记,如果我评论线路

 [datePicker setDate:startDate]; [timePicker setDate:startDate]; 

该应用程序不会崩溃,但当然,它不显示我所需要的时间和date

注:我需要使用24小时格式,如果我决定select格式,我将不得不更改所有的应用程序,以及我没有足够的时间

看看这样的: 如果用户更喜欢12/24小时时钟? …认为第二个答案可能是最适合你的。 然后,根据用户设备是否使用12小时制或24小时制,您可以相应地设置您的[currentDate setDateFormat:….]。

如果你想要一个12小时的时钟,那么设置currentDate如下:

 [currentDate setDateFormat:@"yyyy-MM-dd h:mm:ss a"]; 

如果你想要一个24小时的时钟,那么设置currentDate如下:

 [currentDate setDateFormat:@"yyyy-MM-dd HH:mm"];