【问题标题】:NSDate and the Device's TimezoneNSDate 和设备的时区
【发布时间】:2012-10-02 07:21:03
【问题描述】:

我正在尝试使用以下代码解析这样的日期:2012-10-20T13:45:00+002

NSDateFormatter* formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
NSDate *date = [formatter dateFromString:@"2012-10-20T13:45:00+002"];

但是当我尝试在其时区已经为 +2 的设备上输出时:

NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];
[dateformatter setDateFormat:@"HH:mm"];
dateformatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"ar_EG"];
cell.infoLabel.text = [dateFormatter stringFromDate:date];

输出是:15:43 而不是应该的 13:45。 任何帮助,将不胜感激。 PS:我在 iPhone 上运行 iOS5/6,Xcode 4.5,我在模拟器和物理设备上都试过了。

【问题讨论】:

  • ZZZ 字段以分钟而不是小时表示。
  • 太棒了!谢谢!这正是为什么!我也想知道为什么它会提前 2 分钟显示日期。你能告诉我正确的符号是什么吗?我尝试阅读unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns,但我不确定。
  • 我相信您需要在时间戳的末尾附加一对零,以使其正确解析。
  • 我试过了,但似乎不起作用:原始字符串:2012-11-25T16:00:00+002 添加零后:2012-11-25T16:00:00+00200 NSDate对象的NSLog:2012-11-25 15:58:00 +0000
  • 可能是格式化程序无法处理额外的前导零。 (但你确定你将 modified 字符串传递给格式化程序,而不是原始字符串?)

标签: iphone objective-c ios


【解决方案1】:

您需要添加语言环境和时区

[dateFormatter setLocale:[NSLocale systemLocale]]; // 你想要的语言环境
[dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; // 时区相同

【讨论】:

  • 非常感谢,但没有任何改变,还有其他想法吗?
  • 你可以尝试使用这个 YYYY-MM-dd'T'HH:mm:ssZZZ 和大写的 y。
  • 一个非常丑陋的灵魂stackoverflow.com/questions/11810159/…
猜你喜欢
  • 2013-02-21
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 2011-09-17
  • 2013-08-01
  • 2011-04-09
  • 1970-01-01
  • 2016-06-03
相关资源
最近更新 更多