Tom*_*Tom 0 cocoa-touch objective-c nsdate ios
自今年年底以来,我有一些问题将NSString转换为NSDate.代码之前一直很好用,但它突然开始表现得很奇怪......
例如,2013-01-05在转换为NSDate时变为2014-01-05.
因为它整整一年都不觉得它是时区令人讨厌的.
2012年的日期并没有这样做.
有没有人知道可能出错的是什么?
代码:NSString*dateString = postInfo.noteDate; NSString*newDateString = [dateString substringToIndex:10];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"YYYY-MM-dd"];
NSDate *date = [[NSDate alloc] init];
date = [dateFormat dateFromString:newDateString];
Run Code Online (Sandbox Code Playgroud)
newDateString返回2013-01-05
日期返回2014-01-05
来自文档:
Y 1..n 1997年(基于"年度周"的日历).通常,长度指定填充,但对于两个字母,它还指定最大长度.今年的指定用于ISO 8601定义的ISO年 - 周日历,但可用于需要周日处理的非基于格里高利的日历系统.可能并不总是与日历年相同的值.
y 1..n 1996年.通常,长度指定填充,但对于两个字母,它还指定最大长度.
所以你想'yyyy'
这个"错误"也在精彩的WWDC 2011视频"Session 117 - 执行日历计算"中进行了讨论,这是任何iOS/Cocoa-Developer必看的内容.
关于ISO 8601的维基百科文章
NSDate *date = [[NSDate alloc] init];
date = [dateFormat dateFromString:newDateString];
Run Code Online (Sandbox Code Playgroud)
您创建一个NSDate,而不是创建另一个并覆盖第一个.做就是了
NSDate *date = [dateFormat dateFromString:newDateString];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |