今天我的一位客户报告了一个应用程序功能突然停止工作的错误。 在我对功能进行单元测试后,我发现NSDateFormatter正在转换错误的日期。也许你也曾经历过同样的经历。下面是我的代码
self.frmt2=[[NSDateFormatter alloc]init];
[self.frmt2 setDateFormat:@"YYYY-MM-dd”];
self.str_DateTogetData=[self.frmt2 stringFromDate:[NSDate date]];
如果我的系统日期在29-12-2014,30-12-2014,31-12-2014之间,那么在将日期转换为字符串之后它显示29-12-2015,30-12-2015,31-12 -2015但如果我的系统日期不在这三个日期之间,那么上面的代码正确地将NSDate转换为字符串。但如果我使用下面的代码,那么它将NSDate正确转换为字符串
self.frmt2=[[NSDateFormatter alloc]init];
[self.frmt2 setDateFormat:@"yyyy-MM-dd”];
self.str_DateTogetData=[self.frmt2 stringFromDate:[NSDate date]];
我的问题已经解决但我正在寻求知识为什么会发生。 任何人都有答案。
答案 0 :(得分:4)
yyyy
指定日历年,而YYYY
指定年份(“年度周”)。
从Date Formatter Documentation开始,检查使用格式字符串指定自定义格式部分
中的最后2个点答案 1 :(得分:1)
- 日期格式化程序中的小错误
使用 yyyy 指定年份组件。常见的错误是使用 YYYY 。 yyyy 指定日历年,而 YYYY 指定ISO年周日历中使用的年份(“年度周”)。在大多数情况下, yyyy 和 YYYY 会产生相同的数字,但它们可能会有所不同。通常,您应该使用日历年
您的日期格式化程序应该在此格式[self.frmt2 setDateFormat:@"yyyy-MM-dd"]
答案 2 :(得分:0)
YYYY和yyyy相同的“知识”是完全错误的。
在这个帖子中已经多次解释它们不一样,现在你实际上已经更新了你的问题,说它们是相同的。他们不是。
你完全理解YYYY的用途吗?适用于数周的情况。 2014年第1周,2014年第2周,依此类推。从2014年12月29日星期一到2015年3月4日星期日的一周一周,因为其中有四天是在2015年,这是2015年的第一周。