为什么 NSDateFormatter 无法解析 ISO 8601 格式的日期

发布于 2024-12-12 12:00:11 字数 663 浏览 0 评论 0原文

可能的重复:
转换ISO 8601 时间戳到 NSDate:如何处理 UTC 时间偏移?

我使用 Rails 作为后端,默认日期输出是2008-12-29T00:27:42-08:00

但经过我的研究 NSDateFormatter 无法支持它,除非我将日期更改为 2008-12-29T00:27:42-0800

这是我用来解析 ISO 8601 的代码约会,但这不起作用

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
NSLog(@"%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42-08:00"]);

有什么想法吗?

Possible Duplicate:
Converting an ISO 8601 timestamp into an NSDate: How does one deal with the UTC time offset?

I use rails as backend, the default date output is 2008-12-29T00:27:42-08:00

But after my research NSDateFormatter can not support it, except I change date out to 2008-12-29T00:27:42-0800

Here is the code I used to parse ISO 8601 date, but it's not work

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
NSLog(@"%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42-08:00"]);

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烧了回忆取暖 2024-12-19 12:00:11

问题出在最后的时区。

您需要将其设置为:GMT-0X:00 或 -0X00,小时和分钟之间没有分隔。

以下两种组合有效:

组合 1 - 使用 GMT 格式 (GMT-0X:00) 和 ZZZZ

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"];
NSLog(@"DATE FORMAT:%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42GMT-08:00"]);

组合 2 - 使用 RFC 822 格式 (-0X00) 和 ZZZ

dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
NSLog(@"DATE FORMAT:%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42-0800"]);

The problem is with the timezone on the end.

You need to either have it as: GMT-0X:00 or as -0X00 with no separate between hours and minutes.

The following two combinations work:

Combo 1 - use GMT format (GMT-0X:00) and ZZZZ

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"];
NSLog(@"DATE FORMAT:%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42GMT-08:00"]);

Combo 2 - use RFC 822 format (-0X00) and ZZZ

dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
NSLog(@"DATE FORMAT:%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42-0800"]);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文