在可可中解析ISO8601日期的正确方法是什么?

时间:2011-06-01 00:24:08

标签: objective-c cocoa ios macos iso8601

我想解析Cocoa中的ISO8601日期,适用于iOS 4+和OSX 10.6 +

StackOverflow上已经有一些问题,但在我看来, none 包含了很好的答案。以下是我认为是一个很好的答案:

  1. 答案应该指向支持ISO8601的代码。对于iOS 4+和OSX 10.6 +,此代码应在XCode 4下干净地编译。

  2. 代码应支持所有可能的ISO8601日期格式。

    请注意,这里有很多种可能性。简单地回答NSDateFormatter的一个或两个格式字符串不会削减它。

  3. 答案this library。那是因为它充满了危险的32位假设,它比必要的复杂得多,并且它不能用XCode4 / Clang编译清理。一句话:我完全不相信它!

  4. 谢谢你,Cocoa-ites。我很高兴知道这里是否有真正的答案!

1 个答案:

答案 0 :(得分:6)

最好的方法是this library。 ☺

我应该在该页面上添加一个链接到the Bitbucket repo,其中包含较新的源代码(包括32位和Clang修复程序!)并且有一个问题跟踪器。如果您发现其他任何错误,请提交。

我也想知道你的意思是“比必要更复杂”。正常使用非常简单:

ISO8601DateFormatter *formatter = [[[ISO8601DateFormatter alloc] init] autorelease]; //Or, if you prefer, create it once in -init and own it until -dealloc 
NSDate *parsedDate = [formatter dateFromString:inString];
NSString *unparsedString = [formatter stringFromDate:inDate];

如果您需要更多信息(例如,保留时区),您可以为其中一种较长的方法切换dateFromString:stringFromDate:

如果您的意思是其他内容,我希望听到它,以便我可以改进图书馆。