当date设置中的24小时时间在开启和closures之间切换时,iOS NSDate比较的工作方式是不同的?
团队,我比较使用NSDateFormatterstring形成的date与iOS系统date。 系统date时间设置设置为24小时时间ON时,下面的语句返回true,但当24小时时间OFF时,相同的代码返回false。
有问题的代码:
if ([(NSDate*)[NSDate date] compare:currDate] == NSOrderedAscending) { // -- Code -- This is executed only when the 4-Hour Time ON }
我很困惑。 我得到date的string是24小时格式。 这是一个问题吗? 还是其他什么?
date格式代码:
-(NSDate *)getDateFromString:(NSString *)dateString{ NSDateFormatter* fmt = [[NSDateFormatter alloc] init]; [fmt setDateFormat:@"dd MMM yyyy hh:mm:ss"]; [fmt setTimeZone:[NSTimeZone systemTimeZone]]; [fmt setFormatterBehavior:NSDateFormatterBehaviorDefault]; return [fmt dateFromString:dateString]; }
请参阅Apple的技术问答1480 。
您需要将date格式化程序的语言环境设置为en_US_POSIX
的特殊语言环境。 您还需要指定一个24小时制格式 – HH
,而不是hh
-(NSDate *)getDateFromString:(NSString *)dateString{ NSLocale *posix = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; NSDateFormatter* fmt = [[NSDateFormatter alloc] init]; [fmt setDateFormat:@"dd MMM yyyy HH:mm:ss"]; [fmt setLocale:posix]; return [fmt dateFromString:dateString]; }
23 May 2013 15:37:00
是一个24小时格式string。所以使用24小时格式date格式化程序获得正确的date。那就是它
所以使用
[fmt setDateFormat:@"dd MMM yyyy HH:mm:ss"];