团队, 我正在将使用 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];
}
最佳答案
参见 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];
}
关于当日期设置中的 24 小时时间在开和关之间切换时,iOS NSDate 比较的工作方式不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16706293/