2010-07-20 58 views
3

我有一个非常奇怪的日期格式通过JSON来我。例如 - “July,18 2010 02:22:09”NSDateFormatter,NSDate,UTC和奇怪的日期格式

这些日期始终是UTC。我解析与NSDateFormatter日期,并设置时区为UTC ...

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init]; 
[inputFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 
[inputFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]]; 
[inputFormatter setDateFormat:@"MMMM, dd yyyy HH:mm:ss"]; 
NSDate *formatterDate = [inputFormatter dateFromString:dtStr]; 

然而,登录日期与我的设备的偏移出现时......

“2010-07 -18 02:22:09 -0600“

我在这里做错了什么?

回答

2

我想这是因为你的NSDate没有使用UTC时区。文档说这大约的NSDate的描述方法:

在国际格式YYYY-MM-DD HH接收机的字符串表示:MM:SS±HHMM,其中±HHMM表示的时区以小时偏移和格林威治时间分钟(例如,“2001-03-24 10:45:32 +0600”)。

所以,你并没有真正做错任何事情。 NSDate的行为如预期。你想达到什么目的?你需要一个字符串中的日期吗?你在做日期比较吗?

+0

谢谢。你是对的。当NSDate没有实际存储时区信息时,让它显示偏移量只是令人困惑。 – 2010-07-20 03:38:23

+0

不只是时区信息,而是格式。它不知道它是如何创建的;它不知道它是从美国的长格式日期创建的,也不知道它是用UTC的时间创建的。这就是为什么描述是在当地时间和ISO 8601格式:这就是每个日期描述自己的原因,不管它是如何创建的。要获取以特定格式和/或特定时区显示的日期,您需要使用格式化程序来表示日期,与格式化程序如何使用日期进行分析相反。 – 2010-07-20 09:13:22

+0

如果我们需要这种格式“2010-07-18 02:22:09 +0000”,该怎么做? – Maystro 2013-01-24 09:25:48