为什么NSDateFormatter以12小时格式返回NSDate时间?

时间:2014-12-03 21:10:57

标签: objective-c macos

为什么此代码返回 12:00:05 am (不是00:00:05)? (系统时间格式设置为12小时。)

如果不对新的语言环境进行硬编码,我怎样才能得到我想要的内容? (因为用户&#f; prefs应该保留用户&prefs,并且没有保证/控制该语言环境将为我提供准确的时间格式。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"HH:mm:ss"];
NSDate *date = [[NSDate alloc] init];
NSString *currentDateAndTime = [dateFormatter stringFromDate:date];
NSLog(@"%@", currentDateAndTime);

人们说NSDate存储秒数而不存储格式。所以它必须依赖于NSDateFormatter设置的格式,而不是系统时间格式,但事实并非如此。为什么呢?

UPD:我有解决方案,但仍然没有答案为什么? - 任何想法?

指定当前区域设置并得到我需要的内容:

[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:[[NSLocale currentLocale] localeIdentifier]]];

UPD 2:我的KK solution不起作用

当时间越过中午标记时,它返回00:00:00。就像它过了午夜一样

通过将区域设置设置为en_GB

来解决

不知道它是如何工作的,所以不确定它是否会在将来正常运作。至于我,最好知道时间是否设置为24小时格式。或者查看区域设置的内部

2 个答案:

答案 0 :(得分:1)

KK - 是关键!

无法正常工作,请参阅问题中的UPD 2

感谢有人删除了他的回答。他提到K骨架的关键 - 是的。它可以在不指定区域设置的情况下工作。

所以无论设置如何,我都会使用这个面具并获得我需要的东西:

[dateFormatter setDateFormat:@"KK:mm:ss"];

来自Date Format Patterns

答案 1 :(得分:0)

以下是设置日期和时间的方法: -

1)转到系统首选项 - >日期&时间 - >开放语言&区域 请相应地将时间格式检查为24小时制。

2)现在编写以下代码来提取指定的date and time

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSDate *date = [NSDate date];
//Below date formatter will set your date and time based on your default System Pref. settings
[dateFormatter setDateStyle:NSDateFormatterFullStyle];
[dateFormatter setTimeStyle:NSDateFormatterLongStyle];
NSLog(@"%@",[dateFormatter stringFromDate:date]);