rso*_*son 46 objective-c iso8601 nsdate nsdateformatter
如果我使用以下代码:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm"];
NSDate *myDate = [dateFormatter dateFromString:@"2010-01-28T15:22:23.863"];
NSLog(@"%@", [dateFormatter stringFromDate:myDate]);
Run Code Online (Sandbox Code Playgroud)
它成功地转换为一个Date对象,但是,我似乎无法以任何其他方式格式化它yyyy-MM-dd'T'HH:mm,即记录的是什么2010-01-28T15:22:23
如果我更改dateFormat以说[dateFormatter setDateFormat:@"yyyy-MMMM-d'T'HH:mm"];Date对象为null ...
所以我的最终问题是如何格式化SQL数据库中的ISO8601时间戳,以便使用,例如,NSDateFormatterMediumStyle返回"2010年1月1日"?
Mat*_*hew 42
我有一个类似但稍微复杂的问题,我找到了一个非常简单的解决方案!
问题:
我的传入ISO8601日期如下所示:2006-06-14T11:06:00+02:00它们在末尾有一个时区偏移量.
解决方案: 使用Peter Hosey的ISO8601DateFormatter,您可以从这里下载.
ISO8601DateFormatter *formatter = [[ISO8601DateFormatter alloc] init];
NSDate *theDate = [formatter dateFromString:dateString];
[formatter release], formatter = nil;
Run Code Online (Sandbox Code Playgroud)
和
ISO8601DateFormatter *formatter = [[ISO8601DateFormatter alloc] init];
NSString *dateString = [formatter stringFromDate:[twitch dateTwitched]];
[formatter release], formatter = nil;
Run Code Online (Sandbox Code Playgroud)
小智 19
您需要另一个格式化程序来处理输出.把它放在你的代码之后:
NSDateFormatter *anotherDateFormatter = [[NSDateFormatter alloc] init];
[anotherDateFormatter setDateStyle:NSDateFormatterLongStyle];
[anotherDateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSLog(@"%@", [anotherDateFormatter stringFromDate:myDate]);
Run Code Online (Sandbox Code Playgroud)
dav*_*vid 19
这是来自apple的示例代码
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
NSDate *date = [formatter dateFromString:dateString];
Run Code Online (Sandbox Code Playgroud)
链接:https://developer.apple.com/library/ios/#qa/qa1480/_index.html
Mar*_*cin 12
仅举几例,自iOS 6.0起,您可以使用以下格式:
yyyy-MM-dd'T'HH:mm:ssZZZZZ
Run Code Online (Sandbox Code Playgroud)
我有一个非常快速的C实现,将ISO8601 NSStrings解析为SAMCategories中的NSDates.您可以使用CocoaPods安装它,或者只是将文件复制到您的项目中.
以下是如何使用它:
[NSDate sam_dateFromISO8601String:@"2013-08-24T06:51:21-07:00"]
它非常强大并且支持缺少时区等.就像我上面的评论所说,在解析大量日期时,NSDateFormatter对我来说非常慢.切换到这种实现有很大帮助.
此代码用于我已经处理过的6个生产应用程序(包括Hipstamatic和Roon),没有任何已知问题.有一个测试套件可以防止回归.
简而言之,我认为这是在Objective-C中解析ISO8601字符串的最佳方法.
简而言之,如果您关注性能和传输,则首选发送整数而不是ISO8601字符串.你可以简单地将它们转换为日期[NSDate dateWithTimeIntervalSince1970:yourInteger].性能和您一样快,并且通过线路传输的字符更少.
我应该注意,上次我检查苹果NSDate方法时不支持ISO8601.我仍然有一个关于提供官方支持的苹果公司的错误.
+ (id)dateWithNaturalLanguageString:(NSString *)string
将正确(上次我运行它)解析并NSDate从ISO801字符串创建一个对象,虽然文档说你不应该使用它,它适用于我迄今为止尝试过的所有ISO8601日期.
| 归档时间: |
|
| 查看次数: |
28910 次 |
| 最近记录: |