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”是普通的日历年。
你可以通过整个博客,它是一个很好的去看看
一个常见的错误是使用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.
区分yyyy
和yyyy
所有答案都是另一个问题的正确答案。 这个问题本身是指另一件事。
为什么这两个值是不同的? (从问题中提取)
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;时区