NSDateFormatter中的“YYYY”和“yyyy”之间的区别

“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 

在这里,结果date不同,我明白,但是为什么date2和date3的结果是不同的? 正如我从string创builddate和反向相同的string再次,但输出不匹配?

有没有人知道同样的理由? 虽然它规定了每年的一周,但我仍然应该得到相同的结果。

谢谢..

编辑: –

如果我编码

 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 

如果结果我正确的结果,但我一样通过stringdate相同我得到2013-01-05 12:00:00 +0000 ,检查date2的NSLog,奇怪的结果,为什么?

另外当使用正确的格式使用date格式string很重要。

@“YYYY”是以周为基准的日历年。

@“yyyy”是普通的日历年。

你可以通过整个博客,它是一个很好的去看看

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

一个常见的错误是使用YYYY。 yyyy指定日历年,而YYYY指定ISO年份周历中使用的年份(“年份”)。 在大多数情况下,yyyy和yyyy的数字相同,但是可能不同。 通常你应该使用日历年。

从苹果文件

 dd/MMM/YYYY - eg:1 01/Jan/2000; answer : 19/dec/1999 (see weekly calendar December month last Monday suppose leaf year + 1 day) dd/MMM/yyyy - eg: ordinary - no problem. 

区分yyyyyyyy所有答案都是另一个问题的正确答案。 这个问题本身是指另一件事。

为什么这两个值是不同的? (从问题中提取)

 NSLog(@"Date 2 : %@",datee); //2013-01-05 12:00:00 +0000 NSLog(@"Date 3 : %@", dateString); //Jan 05, 2013 05:30PM 

这里@PJ的答案是,它们在价值上并没有太大的差别。 当你login一个NSDate(这是date2),你得到了你的对象的恰好是UTC 时区的完整描述。 loggingdate3时不会发生这种逻辑,因为它已被转换为string并应用您的时区。

为了打印date3,获取date2的“相同的方式”。您应该为date3指定UTC时区。类似这样的:

 NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMM dd, YYYY hh:mma"]; [dateFormat setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; NSString *dateString = [dateFormat stringFromDate:datee]; NSLog(@"date 3 : %@", dateString); 

希望这可以帮助。

tl;时区