NSDateFormatter中"YYYY"和"yyyy"之间的区别

P.J*_*P.J 61 objective-c nsdate nsdateformatter ios

'YYYY'和'yyyy'之间的确切区别是什么?我在这个链接中读到,它说明了这一点

一个常见的错误是使用YYYY.yyyy指定日历年,而YYYY指定ISO年度日历中使用的年份("年度周").在大多数情况下,yyyy和YYYY会产生相同的数字,但它们可能会有所不同.通常,您应该使用日历年.

但是当我尝试使用时

NSString *stringDate = @"Feb 28, 2013 05:30pm";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM dd, yyyy hh:mma"];
NSDate *date=[dateFormatter dateFromString:stringDate];
NSLog(@"Date 1 : %@",date); //2013-02-28 12:00:00 +0000

NSString *stringDatee = @"Feb 28, 2013 05:30pm";
NSDateFormatter *dateFormatterr = [[NSDateFormatter alloc] init];
[dateFormatterr setDateFormat:@"MMM dd, YYYY hh:mma"];
NSDate *datee=[dateFormatterr dateFromString:stringDatee];
NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"];
NSString *dateString = [dateFormat stringFromDate:datee];
NSLog(@"date 3 : %@", dateString); //Jan 05, 2013 05:30PM
Run Code Online (Sandbox Code Playgroud)

在这里,结果datedatee不同,我明白,但为什么日期2和日期3的结果不同?当我从字符串创建日期并再次将其反转为字符串,但输出不匹配?

有谁知道同样的理由?虽然它指定一年中的一周,但我仍然应该得到相同的结果.

谢谢..

编辑: -

如果我编码

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"];
NSString *dateString = [dateFormatterr stringFromDate:[NSDate date]];
NSLog(@"date: %@", dateString); //Feb 28, 2013 04:37PM
Run Code Online (Sandbox Code Playgroud)

如果结果我得到了正确的结果,但是我得到的相同,我得到的是字符串2013-01-05 12:00:00 +0000,检查NSLog的日期2,奇怪的结果,为什么?

小智 53

此外,使用正确格式的日期格式字符串也很重要.

@"YYYY"是以周为基础的日历年.

@"yyyy"是普通日历年.

你可以通过整个博客,它很好看看

http://realmacsoftware.com/blog/working-with-date-and-time

  • 链接已断开。 (2认同)

Gar*_*ord 26

一个常见的错误是使用YYYY.yyyy指定日历年,而YYYY指定ISO年度日历中使用的年份("年度周").在大多数情况下,yyyy和YYYY会产生相同的数字,但它们可能会有所不同.通常,您应该使用日历年.

来自Apple Docs

  • 我同意这个标识符令人困惑并且没有被很好地选择。它必须存在的标准原因:https://en.wikipedia.org/wiki/ISO_week_date (2认同)