【问题标题】:iPhone NSDateFormatter Timezone ConversioniPhone NSDateFormatter 时区转换
【发布时间】:2010-06-22 15:42:48
【问题描述】:

我正在尝试创建一个格式化程序,它将显示的日期格式转换为 NSDate 对象:

NSString *dateStr = @"2010-06-21T19:00:00-05:00";
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
NSDate *date = [dateFormat dateFromString:dateStr];  

问题在于时区 -05:00,无法使用上述格式正确解析。有什么建议吗?

【问题讨论】:

标签: iphone nsdateformatter


【解决方案1】:

要处理带有冒号的时区,您只需要使用 5 个“Z”。这是一种非常常见的日期格式,即 ISO-8601 格式。这仅适用于 iOS 6.x+

-(NSDate *) dateFromString:(NSString *)string {

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];

    return [formatter dateFromString:string];
}

【讨论】:

  • 确认这是一个比接受的答案更好的解决方案!
  • 适用于 iOS6.0+ 但不适用于 5.0 或 5.1
  • 是的 5 Z 的作品 - 这里有一个类别 github.com/clearbrian/NSDateFormatter_ISO_8601
  • 这对我不起作用(2016-04-04T00:00:00-5:00),但是这对我有用 - yyyy-MM-dd'T'HH:mm:ssZ:z
【解决方案2】:

老实说,您只需在通过格式化程序运行源数据之前更改源数据(删除冒号)。您的原始日期字符串是非标准的,任何时区格式字符串都不能正常工作。

您可以看到有效的输入on unicode.org

ZZZ 例如“-0500”

ZZZZ 例如“GMT-05:00”

没有“-05:00”

【讨论】:

  • 在尝试了多种方法之后,我也确定了这一点。谢谢
  • 我知道这是一个老问题,但我想评论一下我遇到了完全相同的格式问题。该格式是 ISO 8601 格式,这是一种非常标准的格式。
  • 感谢您对时区的额外回答:我从一个 -04:00 的谷歌 rss 提要中获得了一个时区,这让我发疯了好几个小时。您将 tz 更改为 -0400 的解决方案是诀窍。
  • 这不再是最佳解决方案了。请参阅下面的答案。
  • 注意:使用小写的“z”来获取时区字符串(例如zzz -> EDT
【解决方案3】:

可能是我错过了一些东西,但 ZZ 为我工作。 我用过:

@"yyyy-MM-dd'T'HH:mm:ss.SSSZZ"

2014-02-27T08:00:00.000+04:00

【讨论】:

    【解决方案4】:

    这是我从 Sinatra ActiveRecord 后端获得的默认时间格式。这是我的解决方案。

    -(NSDate *) dateFromString:(NSString *)string{
        NSMutableString * correctedDateString = [[NSMutableString alloc] initWithString:string];
        [correctedDateString deleteCharactersInRange: NSMakeRange(22, 1)];
    
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
    
        return [formatter dateFromString:correctedDateString];
    }
    

    【讨论】:

      【解决方案5】:

      这是唯一对我有用的解决方案:

      [dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];
      

      【讨论】:

        【解决方案6】:

        5 ZZZZZ - 这是我写的一个类别,带有一些 GMT 到 BST 的样本

        https://github.com/clearbrian/NSDateFormatter_ISO_8601

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-02
          • 2011-10-27
          • 2018-03-01
          • 1970-01-01
          • 2012-09-28
          • 2016-12-14
          • 2012-05-17
          • 2013-09-16
          相关资源
          最近更新 更多