我想我不明白如何正确管理时区。我有一个从各种方法生成的日期对象,包括 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,所以我一定遗漏了一些东西。