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

标签 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];
}

最佳答案

参见 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/

相关文章:

objective-c - 为什么使用 NSDate 将 double 转换为字符串会额外增加 30 分钟

ios - 按地址和地名自动完成搜索栏 - Swift 4

java - 为什么没有收到(UDP 多播)数据包?

ios - 在file:///cordova应用程序中获取印前检查问题

ios - 运行测试时静态变量变为零

iOS 表格 View 自动取消选择行

objective-c - 如何检查 NSDate 是否发生在其他两个 NSDate 之间

ios - 每周特定日期的 NSDate 扩展

ios - 从 Raspberry Pi 到 iPhone 的实时数据

javascript - jQuery 可以在 Safari 上工作,但不能在 iOS 上工作 - 我可以做什么来调试?