队 我正在使用NSDateFormatter将字符串形成的日期与iOS系统日期进行比较。当系统日期时间设置设置为24小时时间时,以下语句返回true,但相同的代码在24小时时间关闭时返回false。
有问题的代码:
if ([(NSDate*)[NSDate date] compare:currDate] == NSOrderedAscending) {
// -- Code -- This is executed only when the 4-Hour Time ON
}
我很困惑。我获取日期的字符串是24小时格式。这是一个问题吗?还是其他什么?
日期格式代码:
-(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];
}
答案 0 :(得分:8)
请参阅Apple的Technical Q&A 1480。
您需要将日期格式化程序的区域设置设置为en_US_POSIX
的特殊区域设置。您还需要指定24小时制格式 - HH
,而不是hh
。
-(NSDate *)getDateFromString:(NSString *)dateString{
NSLocale *posix = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSDateFormatter* fmt = [[NSDateFormatter alloc] init];
[fmt setLocale:posix];
[fmt setDateFormat:@"dd MMM yyyy HH:mm:ss"];
return [fmt dateFromString:dateString];
}
答案 1 :(得分:1)
23 May 2013 15:37:00
是24小时格式字符串。因此,使用24小时格式日期格式化程序获取正确的日期。单词
所以使用
[fmt setDateFormat:@"dd MMM yyyy HH:mm:ss"];