Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 什么';用cocoa解析ISO8601日期的正确方法是什么?_Objective C_Cocoa_Ios_Macos_Iso8601 - Fatal编程技术网

Objective c 什么';用cocoa解析ISO8601日期的正确方法是什么?

Objective c 什么';用cocoa解析ISO8601日期的正确方法是什么?,objective-c,cocoa,ios,macos,iso8601,Objective C,Cocoa,Ios,Macos,Iso8601,我想用Cocoa解析iOS 4+和OSX 10.6的ISO8601日期+ 关于StackOverflow已经有一些问题了,但在我看来,没有一个包含好的答案。我认为这是一个很好的答案: 答案应该指向支持ISO8601的代码。对于iOS 4+和OSX 10.6+,这段代码应该在XCode 4下干净地编译 代码应支持所有可能的ISO8601日期格式 请注意这里有很多很多的可能性。对于NSDateFormatter来说,简单地回答一两个格式字符串并不能解决问题 答案应该是否定的。这是因为它充满了危险

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

关于StackOverflow已经有一些问题了,但在我看来,没有一个包含好的答案。我认为这是一个很好的答案:

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

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

    请注意这里有很多很多的可能性。对于
    NSDateFormatter
    来说,简单地回答一两个格式字符串并不能解决问题

  • 答案应该是否定的。这是因为它充满了危险的32位假设,它比必要的复杂得多,并且不能用XCode4/Clang编译干净。一句话:我根本不相信它

  • 谢谢,哥们儿。我很兴奋地发现这里是否有真正的答案

    最好的方法是。☺

    我应该在该页面上添加一个到的链接,该链接包含较新的源代码(包括32位和叮当声修复!),并且有一个问题跟踪程序。如果您在其中发现任何其他bug,请将其归档

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

    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];
    
    如果需要更多信息(例如,保留时区),您可以将其中一个较长的方法的日期从字符串:或
    stringFromDate:
    切换到其他方法


    如果你的意思是别的,我想听听,这样我可以改进图书馆。

    Ha!嗨,彼得。太好了,我来看看Bitbucket上的代码,看看它是如何运行的。我必须承认,“比必要的更复杂”,我的意思是,在目视检查之后,我认为您的库的代码可能很难维护。对我来说,它不像干净的、模块化的、分解良好的代码那样“阅读”。再加上32/64的问题,让我不得不另谋高就。这就是说,ISO8601是一个棘手的野兽,就像解析器一样。。。所以我很高兴在这一点上得到纠正,可能是告诉我自己编写该死的ISO8601解析器是的,不太好看。每个主要的工作方法都很长,有六个goto。理想情况下,我可能会使用一个或三个正则表达式进行解析;考虑到Cocoa还没有内置的正则表达式API(只有Cocoa Touch有),如果我决定为了好玩而重写它,我可能会制作某种自定义状态机。尽管如此,我认为更高的优先级是切换到测试的SETestItKIT。当前代码工作,但我希望在重新考虑实现之前更容易测试和重新测试。(顺便提一下:
    maketest
    来运行当前的测试。)我现在使用的是在Bitbucket上找到的这个库的版本。它编译得很干净,从我有限的测试来看,似乎可以工作@彼得:你肯定应该更新你的网站,指向bitbucket——这将帮助人们意识到你的库仍然在维护中。(事实上,比特桶回购协议基本上是不可行的。)除非在接下来的几天里有人对我的问题提出不同的答案,否则我会将@Peter的答案标记为被接受的答案@戴夫·佩克:我已经更新了页面,添加了到Bitbucket的链接。这个库似乎有点缺陷:-(如果我错了,请纠正我,但我绝对没有看到时间或时区解析的测试,这些似乎是我使用此代码时在iOS上被破坏的区域。它不会生成有效的ISO8601次,也不会以其当前形式解析它们。我还没有可用的补丁,但如果我得到一个,我将添加另一个注释。我已经提出了initia问题追踪器上有漏洞。