1

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

4

1 回答 1

3

不要使用格式符号:“YYYY”!改用“yyyy”!

“YYYY”是周年,这不是你想要的!

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

于 2013-01-07T03:46:08.107 回答