NSDateFormatter中的问题将NSDate转换为字符串

时间:2014-12-30 09:58:56

标签: ios objective-c xcode date

今天我的一位客户报告了一个应用程序功能突然停止工作的错误。 在我对功能进行单元测试后,我发现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]];

我的问题已经解决但我正在寻求知识为什么会发生。 任何人都有答案。

3 个答案:

答案 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年的第一周。