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

标签 objective-c macos cocoa nsdate nsdateformatter

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

2013:10:15 19:19:31

采用年:月:日24小时:分:秒格式。我使用以下代码来解析它:

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。 (我在 Mavericks,我认为这是 Mavericks 的一个新问题)无论如何,我尝试过完全不设置区域设置、将区域设置设置为 en_US_POSIX 而不仅仅是 en_US 的组合>,为格式化程序设置时区,将日期格式的 yyyy 更改为 YYYY,并将 allowNaturalLanguage 更改为 NO,但是,dateFromString总是返回nil。我的应用程序在 OS X Mavericks 上运行,我的系统语言是英语,如果重要的话,我的区域设置为土耳其。我希望我的应用程序仅支持英语,与用户所在的区域(包括日期格式)无关。我见过这个问题:Parsing EXIF date string to NSDate但即使我尝试了确切的步骤,格式化程序也会为 dateFromString 返回 nil。日期格式化程序出了什么问题?

最佳答案

这似乎是 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"];

产生预期的结果。

关于objective-c - NSDateFormatter dateFromString 返回 nil 用于解析 EXIF 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19774638/

相关文章:

objective-c - 更改窗口背景颜色

ios - 调度队列和信号量

ios7 - 为什么 UITextView 在我开始输入时垂直居中

objective-c - 为 OSX 10.6 编译时找不到 NSExpression

emacs - 在 Macintosh 上将文本粘贴到 emacs

macos - 操作系统状态栏上的 "disabled"图标规范

cocoa - 如何通过 gdb 打印和使用常量(通过 Xcode)?

ios - 如何计算两个日期之间的几十年数

ios - 种子随机数 Objective-C

c++ - IOKit 和获取唯一 ID