【问题标题】:How to convert a UTC date to NSDate?如何将 UTC 日期转换为 NSDate?
【发布时间】:2010-03-24 02:37:36
【问题描述】:

我有一个 UTC 字符串,想将其转换为 NSDate。

static NSDateFormatter* _twitter_dateFormatter;
[_twitter_dateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault];
[_twitter_dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
[_twitter_dateFormatter setLocale:_en_us_locale];

NSDate *d = [_twitter_dateFormatter dateFromString:sDate];

当我通过调试器时,即使 sDate 是“2010-03-24T02:35:57Z”,d 也是 nil

不完全确定我做错了什么。

【问题讨论】:

  • 还有一点点挑剔:d 在调试器中是 nil 而不是 *d(你不能取消引用空指针)。
  • 实际上,您的字符串不是“UTC”。您的“sDate”字符串值是标准格式(RFC 3339 或 ISO 8601),表示恰好位于 Zulu (UTC) 时区(末尾的“Z”)的日期时间。

标签: iphone objective-c nsdate nsdateformatter


【解决方案1】:

同样需要分配/初始化您的 NSDateFormatter 对象,但您还有另一个问题:您的日期格式字符串与您提供的实际日期不匹配。

"EEE MMM dd HH:mm:ss ZZZ yyyy"
- vs -
"2010-03-24T02:35:57Z"

该格式字符串将匹配如下内容:

"Wed Mar 24 00:07:33 -0400 2010"

日期格式字符串的含义见unicode standard

【讨论】:

  • 感谢您指出不匹配的地方。我不确定如何将字符串格式化为“2010-03-24T02:35:57Z”
  • 类似问题stackoverflow.com/questions/1263455/… 特别注意建议您可能希望用明确的数字时区 (-0000) 替换输入字符串中的最后一个“Z”
  • 谢谢!在我的情况下,日期格式应该是 yyyy-MM-dd'T'HH:mm:ssZ 用 (-0000) 替换 Z 就可以了。
【解决方案2】:

您没有分配或初始化您的 NSDateFormatter 对象。

试试这样的:

NSDateFormatter* _twitter_dateFormatter = [[NSDateFormatter alloc] init];
[_twitter_dateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault];
[_twitter_dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
[_twitter_dateFormatter setLocale:_en_us_locale];

NSDate *d = [_twitter_dateFormatter dateFromString:sDate];
[_twitter_dateFormatter release];

还不清楚您为什么将 _twitter_dateFormatter 声明为静态。如果您想避免重新分配它,请将其设为您班级的 ivar。

【讨论】:

    【解决方案3】:

    Apple 提供了Parsing an RFC 3339 date-time 的源代码。如果使用 ARC,您可能需要通过删除对“自动释放”的调用来调整该来源。

    仅供参考,RFC 3339ISO 8601one deviation 的子集(RFC 3339 中允许负零偏移)。因此,Apple 的代码是一块石头打死两只鸟,处理所谓的“互联网风格”RFC 3339 日期时间以及 ISO 8601 的简单日期时间。

    【讨论】:

      猜你喜欢
      • 2015-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多