当日期设置中的24小时时间设置在ON和OFF之间切换时,iOS NSDate比较的工作方式不同?

时间:2013-05-23 05:35:07

标签: ios objective-c nsdate nsdateformatter

队 我正在使用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];
}

2 个答案:

答案 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"];