我用“DateFromComponents”定了个日期,当我读出来的时候.这是错误的。我必须把日期定在第二天或以后的任何事情上,这样我才能得到正确的年份?!?我设定了2011年,当我读到它的时候,我得到了2010年!
day = 1;
month = 1;
year = 2011;
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:day];
[components setMonth:month];
[components setYear:year];
NSDate *date = [gregorian dateFromComponents:components];
[gregorian release];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"DD MMMM YYYY"];
NSLog (@"hmm: %@",[dateFormatter stringFromDate:actDate]);- 1 January 2010 /// 2010 not 2011!?
如何解决这个问题。
thx克里斯
发布于 2010-07-10 18:32:29
我运行了这个代码:
NSInteger day = 1;
NSInteger month = 1;
NSInteger year =0;
NSCalendar *gregorian;
NSDateComponents *components;
NSDate *theDate;
NSDateFormatter *dateFormatter;
for (int i=2005; i<2015; i++) {
year= i;
gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
components = [[NSDateComponents alloc] init];
[components setDay:day];
[components setMonth:month];
[components setYear:year];
theDate = [gregorian dateFromComponents:components];
[gregorian release];
dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"DD MMMM YYYY"];
NSLog(@"year=%d",year);
NSLog (@"hmm: %@",[dateFormatter stringFromDate:theDate]);
NSLog(@"theDate=%@\n\n",theDate);
}..。得到了这个输出:
year=2005
hmm: 01 January 2004
theDate=2005-01-01 00:00:00 -0600
year=2006
hmm: 01 January 2006
theDate=2006-01-01 00:00:00 -0600
year=2007
hmm: 01 January 2007
theDate=2007-01-01 00:00:00 -0600
year=2008
hmm: 01 January 2008
theDate=2008-01-01 00:00:00 -0600
year=2009
hmm: 01 January 2008
theDate=2009-01-01 00:00:00 -0600
year=2010
hmm: 01 January 2009
theDate=2010-01-01 00:00:00 -0600
year=2011
hmm: 01 January 2010
theDate=2011-01-01 00:00:00 -0600
year=2012
hmm: 01 January 2012
theDate=2012-01-01 00:00:00 -0600
year=2013
hmm: 01 January 2013
theDate=2013-01-01 00:00:00 -0600
year=2014
hmm: 01 January 2014
theDate=2014-01-01 00:00:00 -0600显然,问题在于格式化程序,而不是日期。但是,我不认为格式化程序有什么问题。。
编辑:
移动:
[dateFormatter setDateFormat:@"DD MMMM YYYY"];..。至:
[dateFormatter setDateFormat:@"DD MMMM yyyy"];..。解决了这个问题虽然我不知道为什么。
发布于 2010-07-11 09:06:39
正如http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns中所述,YYYY可能与日历年不同。
一月一日可以属于前一年的最后一周。当提到一年中的几周(即2009年的第52周)时,YYYY将显示所使用的年份。如果2010年1月1日属于2009年的第52周,那么YYYY将展示2009年。
所以你应该用yyyy。
https://stackoverflow.com/questions/3220176
复制相似问题