【问题标题】:NSDateFormatter Daylight Savings TimeNSDateFormatter 夏令时
【发布时间】:2012-04-25 01:01:38
【问题描述】:

我正在使用 NSDate 格式化程序从 Facebook Graph API 请求(格林威治标准时间)中获取日期并将其转换为用户的本地时区。我可以很好地读取日期并设置其新时区,但是当我打印出新日期时,它似乎没有考虑夏令时。

下面的时间实际上来自请求,但例如在这里我只是输入来自 Facebook 响应的标准时间字符串

NSString *time = @"2012-04-12T15:25:09+0000"
NSTimeZone *localZone = [NSTimeZone localTimeZone];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:localZone];
[formatter setDateFormat:@"yyyy-mm-dd'T'HH:mm:ssZZZZ"];
NSDate *date = [formatter dateFromString:time];
[formatter setDateFormat:@"eee MMM dd, yyyy hh:mm a"];
NSString *dateStr = [formatter stringFromDate:date];
NSLog(@"%@",dateStr);

当它打印这个日期时,它会打印出“2012 年 1 月 12 日星期四上午 10:25”,这对于“美国/纽约”时区,这是我所在的地方,这是错误的。我应该是“2012 年 1 月 12 日星期四上午 11:25”或提前一小时。有没有办法强制夏令时?提前致谢!

编辑: 我注意到它实际上错误地格式化了月份。由于某种原因,它需要四月并成为一月。为什么会这样?

【问题讨论】:

  • 我刚刚注意到月份也是错误的。为什么?

标签: iphone objective-c ios nsdate nsdateformatter


【解决方案1】:

当它打印这个日期时,它会打印出“2012 年 1 月 12 日星期四上午 10:25”,这对于我所在的“美国/纽约”时区来说是错误的。

不。夏令时直到 3 月才开始,因此在那个时间应用它是错误的。 NSDateFormatter 在这里做的是正确的事情。

如果您想强制使用特定的 GMT 偏移量,您应该使用 NSTimeZone timeZoneForSecondsFromGMT: 而不是 localTimeZone

【讨论】:

  • 好吧,实际上我注意到整个问题可能源于它错误地格式化了月份。知道为什么月份出错了吗?
  • [formatter setDateFormat:@"yyyy-mm-dd'T'HH:mm:ssZZZZ"]; 应该是 [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"];
  • 哇,我觉得自己很笨。非常感谢!
  • 谢谢雨姬!给你一个 +1 以给出正确的格式。在尝试解码标记语言文档并为其转换随机传入格式时,我觉得我正在阅读希腊语!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 2012-04-07
相关资源
最近更新 更多