【问题标题】:Setting NSDate in a "TimePicker" with 24 - 12 hours format xcode在具有 24 - 12 小时格式 xcode 的“TimePicker”中设置 NSDate
【发布时间】:2012-06-29 06:34:21
【问题描述】:

我正在使用一些 NSDate 对象,而且我使用的是 24 小时格式的 iPhone,所以当我测试我的应用程序时,一切正常,但是,我的一个朋友在他的 iPhone 上尝试了该应用程序,但是他使用 12hrs 格式,经过一番研究,我发现问题出在日期上,我不知道为什么 我用它来设置日期选择器和时间选择器,所以我从数据库中读取了一些值(是的,我检查了这些值并且它们是正确的,这不是值问题),所以所有这些数据都被格式化并作为一个 NSDate 放在一起,然后,我用我刚刚创建的这个日期设置日期选择器和时间选择器

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,所以我不明白为什么我一直看一些“上午”。或“下午”在我打印调试的一些 NSLogs 中

提前致谢

抱歉,如果我评论这些行,我几乎忘记了

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

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

注意:我需要使用 24 小时格式,如果我决定使用 am pm 选择格式,我将不得不更改我所有的应用程序,好吧,我没有足够的时间

【问题讨论】:

  • 您是否尝试过像这样设置日期格式化程序:[currendDate setDateFormat:@"yyyy-MM-dd h:mm:ss a"]
  • 我需要 24 小时,使用它我将永远拥有上午或下午,我不希望这样,如果我更改它,我将不得不更改我所有的应用程序
  • 好的,然后看看这个:stackoverflow.com/questions/8520467/… 认为第二个答案可能最适合您。然后根据用户的设备使用 12 小时制还是 24 小时制,您可以相应地设置 [currentDate setDateFormat:....]。
  • 天哪,你刚刚救了我的命 :D 非常感谢,这正是我需要的 :D 发表你的评论就像一个答案,这样我就可以选择它作为解决方案 :D

标签: iphone ios xcode nsdate nsdateformatter


【解决方案1】:

看看这个像:Find if user prefers 12 / 24 Hour Clock?...认为第二个答案可能是最适合你的。然后根据用户的设备使用 12 小时制还是 24 小时制,您可以相应地设置 [currentDate setDateFormat:....]。

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

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

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

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

【讨论】:

  • 比链接中检查 12 / 24 的最快方法: NSString *format = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]]; BOOL is24Hour = ([format rangeOfString:@"a"].location == NSNotFound);
猜你喜欢
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多