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

标签 ios date timezone date-format

我想我不明白如何正确管理时区。我有一个通过各种方法(包括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/

相关文章:

iOS 7 : Strange AVAssetExportSession bug

ios - 为什么我的启动图像后面有一个拉伸(stretch)的图标图像,如何摆脱它?

c - date 和 strftime 的时区从何而来?

mysql - 即使count=0 mysql也选择

javascript - 按日期对具有日期字段的对象数组进行排序

postgresql - Postgres : "AT TIME ZONE ' localtime '"== "AT TIME ZONE 'utc' "?

javascript - Postgres + Javascript + 时区

ios - 尝试将数据存储在类中,更改 View Controller 时返回 nil

ios - 使用 AVAssetExportSession 全屏导出视频

mysql - 条件 str_to_date() 如果格式是一种类型,否则不执行任何操作