【问题标题】:Objective-C NSDateFormatter returning arbitrary dateObjective-C NSDateFormatter 返回任意日期
【发布时间】:2016-02-24 10:48:24
【问题描述】:
NSString *string = [NSString stringWithFormat:@"%@-%ld %@",self.date,(long)  [self getYear],self.time];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];  
[dateFormat setDateFormat:@"EEE, MMM-dd-YYYY hh:mm"];
NSDate *date = [dateFormat dateFromString:string];
NSLog(@"date: %@",date);

如果我输入Mon, Feb-29-2016 9:00

我从 2015-12-21 03:30:00 +0000

得到一个输出

与实际日期相差甚远

【问题讨论】:

  • 第一行执行后string的值是多少?

标签: ios objective-c nsdate nsdateformatter


【解决方案1】:

一个常见的错误/误解:

YYYY

年份(在基于“一年中的一周”的日历中)。通常长度指定填充,但对于两个字母,它还指定最大长度。此年份名称用于 ISO 8601 定义的 ISO 年-周日历,但也可用于需要处理周日期的非公历日历系统中。 可能并不总是与日历年相同

标准日历年的正确说明符是小写yyyy

【讨论】:

  • 有效!有趣的是,我在另一个类似的场景中从未遇到过这个问题
  • 见引文最后一句中的可能不 ;-)
  • 好吧,现在又出现一个错误,dateformatter第一次转换日期,但不是第二次,代码同上(lldb) po string Tue, Mar-08-2016 0:00 ( lldb) po date 2016-03-07 18:30:00 +0000 (lldb) po string Fri, Mar-11-2016 16:00 (lldb) po date nil
  • 第二个日期字符串是 24 小时模式。其说明符是大写的HH
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多