4

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

2 回答 2

9

请参阅 Apple 的技术问答 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];
}
于 2013-05-23T05:48:13.000 回答
1

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

所以使用

[fmt setDateFormat:@"dd MMM yyyy HH:mm:ss"];
于 2013-05-23T05:47:16.883 回答