当日期设置中的24小时时间在ON和OFF之间切换时,iOS NSDate Comparison的工作方式会有所不同



团队,我正在将使用NSDateFormatter由字符串形成的日期与iOS系统日期进行比较。当系统日期时间设置为24小时时间ON时,以下语句返回true,但当24小时时间OFF时,相同的代码返回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];
}

请参阅苹果的技术问答;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];
}

23 May 2013 15:37:00是一个24小时格式的字符串。因此,使用24小时格式的日期格式化程序可以获得正确的日期。这就是

所以使用

[fmt setDateFormat:@"dd MMM yyyy HH:mm:ss"];

最新更新