NSDateFormatter dateFromString 返回 nil 用于解析 EXIF 数据

Posted

技术标签:

【中文标题】NSDateFormatter dateFromString 返回 nil 用于解析 EXIF 数据【英文标题】:NSDateFormatter dateFromString returns nil for parsing EXIF data 【发布时间】:2013-11-04 18:34:33 【问题描述】:

我正在尝试将数据从 EXIF 日期解析为 NSDate。这是从图像文件中获取的示例日期字符串:

2013:10:15 19:19:31

它是year:month:day 24hour:minute:second 格式。我正在使用以下代码来解析:

NSDateFormatter *formatter = [[NSDateFormatter alloc] initWithDateFormat:@"yyyy:MM:dd HH:mm:ss" allowNaturalLanguage:YES];
formatter.formatterBehavior = NSDateFormatterBehavior10_4;
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSDate *date = [formatter dateFromString:dt];

如果我不设置格式化程序行为,它会抱怨在 10.0 格式化程序上尝试使用 10.4 的语言环境标识符。 (我在小牛队,我认为这是小牛队的一个新问题)无论如何我已经尝试过完全不设置语言环境,将语言环境设置为en_US_POSIX 而不仅仅是en_US,为格式化程序设置时区,更改@日期格式为 987654328@ 到 YYYYallowNaturalLanguageNO,但是,dateFromString 总是返回 nil。我的应用程序在 OS X Mavericks 上运行,我的系统语言是英语,如果重要的话,我的地区设置为土耳其。我希望我的应用程序是纯英语的,独立于用户所在的地区(包括日期格式)。我见过这个问题:Parsing EXIF date string to NSDate 但即使我尝试了确切的步骤,格式化程序也会为dateFromString 返回 nil。日期格式化程序有什么问题?

【问题讨论】:

成功了。奇怪的。它看起来像格式化程序中的错误。您能否将其发布为答案,以便我接受它,并对日期格式化程序的这种奇怪行为(如果有)有任何可能的解释? 看起来你做的一切都是正确的——没有解释,除了小鬼。 【参考方案1】:

这似乎是initWithDateFormat 初始化程序的问题。 根据文档,它创建了一个使用“OS X v10.0 格式化行为”的格式化程序,但我不知道那是什么。并且明确地将行为设置为 NSDateFormatterBehavior10_4 似乎也无济于事。

使用

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy:MM:dd HH:mm:ss"];
NSDate *date = [formatter dateFromString:@"2013:10:15 19:19:31"];

产生预期的结果。

【讨论】:

将此作为错误报告给 Apple 也是一个好主意。我现在就去做。

以上是关于NSDateFormatter dateFromString 返回 nil 用于解析 EXIF 数据的主要内容,如果未能解决你的问题,请参考以下文章

带有 NSDateFormatter 的 RestKit

共享 NSDateFormatter - 最佳实践?

NSDateFormatter 没有意义

NSDateFormatter 没有给出预期的结果

NSDateFormatter 给出不同的输出/错误(GMT?)时间

NSDateFormatter常见的使用方式