2010-07-20 57 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