当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"];