Iphone NSDateFormatter+;dateFormatFromTemplate:options:locale:BUG?
请参阅以下代码和输出Iphone NSDateFormatter+;dateFormatFromTemplate:options:locale:BUG?,iphone,nsdateformatter,Iphone,Nsdateformatter,请参阅以下代码和输出 NSDateComponents *dateComponents = [[[NSDateComponents alloc] init] autorelease]; [dateComponents setYear:2011]; [dateComponents setMonth:1]; [dateComponents setDay:1]; NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:
NSDateComponents *dateComponents = [[[NSDateComponents alloc] init] autorelease];
[dateComponents setYear:2011];
[dateComponents setMonth:1];
[dateComponents setDay:1];
NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:dateComponents];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:[NSDateFormatter dateFormatFromTemplate:@"YYYYMMMd" options:0 locale:[NSLocale currentLocale]]];
NSString *dateString = [dateFormatter stringFromDate:date];
NSLog(@"Happy New Year: %@", dateString);
你对产出有什么期望
Happy New Year: Jan 1, 2011
但结果是
Happy New Year: Jan 1, 2010
怎么了?请帮助…模板格式字符串应为
@“yyyyMMMd”
(小写“y”表示年份)
大写的“Y”是另一个字母(请参阅)。+1具体来说,Y是当前一周的年份。2011年1月1日这一周属于2010年,所以YYYY生产2010。@ughoavgfhw:谢谢。我应该指出答案中的差异,因为它可能会让人困惑,因为“Y”在大多数情况下似乎“起作用”。大写字母“Y”表示包含日期的一周从哪一年开始。因此,如果1月1日是星期四,“Y”将给出该周开始的年份(即星期一)。对于1月7日或更高版本,“Y”将给出与“Y”相同的结果,但当然最好首先使用正确的格式字母。@Anna:我认为,准确地说,Y给出的年份带有一些“周数”。因此,12月31日可以是下一年第一周的一部分,因此Y可以给你下一年的时间(尽管这一周从今年开始)