我想我不明白如何正确管理时区。我有一个通过各种方法(包括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”是星期几,这不是您想要的!
另请参阅Converting NSString to NSDate adds one year in some cases
关于ios - 时区问题-一年中获得意外结果,怀疑我没有正确处理时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189524/