时区问题 - 获得一年的意外结果,怀疑我没有正确处理时区



我想我不明白如何正确管理时区。我有一个由各种方法生成的日期对象,包括UIDatepicker,它使用设备时区作为UI,并生成一个UTC+0000的日期对象。

我还试图从日期对象中提取4位数的年份,但我得到了一个意想不到的结果。我认为问题是我需要将时区应用于日期格式化程序,但这似乎没有帮助。下面是我的代码:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSTimeZone *currentTimeZone = [NSTimeZone localTimeZone];
[dateFormat setTimeZone:currentTimeZone];
[dateFormat setDateFormat:@"YYYY"];
NSLog(@"About to use self.displayedDate: %@",self.displayedDate);
NSString *gregorianYear = [dateFormat stringFromDate:self.displayedDate];
NSLog(@"Calculated Gregorian year: %@ from date %@",gregorianYear,self.displayedDate);

我目前在CST。当我运行此命令时,得到以下输出:

2013-01-06 21:22:47.168 293 Calendar[4835:907] About to use self.displayedDate: 2012-12-31 03:22:26 +0000
2013-01-06 21:22:47.171 293 Calendar[4835:907] Calculated Gregorian year: 2013 from date 2012-12-31 03:22:26 +0000

我的应用程序中的日期最初是从当前日期/时间设置的。然后我使用仅为日期配置的UIDatePicker控件将日期设置为2012年12月30日(这就是UIDatePicker控件上显示的内容)。日期拾取器的返回值直接插入到产生上述输出的代码中。在我看来,很明显,它应该产生2012而不是2013,所以我一定是错过了什么。

不要使用格式符号:"YYYY"!用"yyyy"代替!

"YYYY"是星期年,这不是你想要的!

参见将NSString转换为NSDate在某些情况下会增加一年

最新更新