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

Dav*_*eck 7 macos cocoa objective-c iso8601 ios

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

StackOverflow上已经有一些关于这方面的问题,但在我看来,它们中没有一个包含好的答案.以下是我认为构成一个好答案的内容:

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

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

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

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

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

Pet*_*sey 6

最好的方法是这个库.☺

我应该在该页面上添加一个链接到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];
Run Code Online (Sandbox Code Playgroud)

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

如果你的意思是别的,我想听听,所以我可以改进图书馆.