1

我的日期格式为

2013-07-16T07:40:36.939-04:00

当我将其转换为 NSDate 时,日期格式为 IST 或 GMT +5:30,就像我在印度一样。我应该如何让它使用 -4:00 作为时区并根据数字显示 EST 或 PDT。如果我使用 zzz,它会返回 GTM+5:30,而 zzzz 会返回印度标准时间。这是我的方式

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSzzz"];
NSDate *date = [dateFormatter dateFromString:strDate];
4

2 回答 2

1

您需要将格式化的语言环境设置en_US_POSIX为强制它使用提供的时区而不是系统时区:

[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
于 2013-07-16T16:37:59.803 回答
1

您正在正确解析日期字符串(在 iOS 6 及更高版本中;这不是 iOS 5 中识别的日期格式,它识别-0400or GMT-04:00,但不是-04:00)。不幸NSDate的是,对象没有“时区”,因此NSDateFormatter.

如果您真的想捕获原始时区,我认为您可能必须手动解析最后几个字符(the -04:00)的字符串,确定时区偏移量,并将其存储在单独的字段中,并在输出日期时使用这个单独的时区偏移来相应地设置timeZone日期格式化程序的属性。或者,如果您真的想表示原始日期,您可以将这个 ISO8601 日期字符串重新格式化为人类友好的字符串,并保留这个漂亮的字符串(NSDate大概还有对象)。

顺便说一句,分裂头发,但您可能要谨慎假设这-04:00将代表EDT,因为(a)它取决于一年中的时间;(b) 还有其他时区-04:00(例如,有一堆南美时区也是-04:00)。

通常,应用程序通过 (a) 将日期字符串转换为NSDate对象来完全避免这个问题;(b)NSDate使用运行应用程序的设备的时区和区域设置输出这些对象。

于 2013-07-16T16:50:35.337 回答