2011-04-29 46 views
2

正常工作,我有以下日期:2011-04-29T14:54:00-04:00NSDateFormatter不與UTC

當它運行時通過下面的代碼將其轉換爲一個日期,日期爲null出於某種原因:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 
NSDate *date = [dateFormatter dateFromString:localDate]; 
[dateFormatter release]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-mm-dd"]; 
NSLog(@"%@", [formatter stringFromDate:date]); 

任何幫助,將不勝感激

解決:

好吧,我想通了。出於某種原因,此方法不起作用。

NSDate *date = [dateFormatter dateFromString:localDate]; 

這反而有效。希望它能幫助別人!

NSError *error = nil; 
NSDate *date = nil; 
[dateFormatter getObjectValue:&date forString:localDate range:nil error:&error]; 
+0

哪一個是空的?您嘗試在最後登錄的字符串或從第一個日期格式化程序獲取的日期?另外,你的第二種格式看起來很奇怪:你真的想要「四位數分鐘 - 一天」嗎? – 2011-04-30 00:13:26

+0

當我停在NSLog行的斷點處時,date變量爲nil。我只是把這個四位數的年 - 分 - 日作爲一個測試,把它寫回字符串。 – 2011-04-30 01:22:56

回答

3

好的,我想通了。出於某種原因,此方法不起作用。

NSDate *date = [dateFormatter dateFromString:localDate]; 

這反而有效。希望它能幫助別人!

NSError *error = nil; 
NSDate *date = nil; 
[dateFormatter getObjectValue:&date forString:localDate range:nil error:&error]; 
+0

你知道如何添加timeoffset「2012-10-15T09:46:16 + 02:00」以便得到「2012-10-15 11:46:16」嗎?提前致謝 – 2012-10-16 19:04:58

2

嘗試設置時區:

dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 

,你可能需要引用-'s,:'s,在您的格式字符串中的Z(也許不是-'s和:的,但我認爲至少Z):

[dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"]; 

除了那些,這就是我的日期格式化程序配置,它工作正常。

+0

這對我也不適用。我會繼續努力...... – 2011-04-30 01:35:04

0

NSDateFormatter似乎只使用UTS #35中描述的'Z'來實現時區的規範格式。用no leniency in parsing

  1. TimeZoneID +/-偏移量,小時和分鐘用冒號分隔,例如。 2011-04-29T14:54:00GMT-04:00
  2. +/-偏移量,小時和分鐘之間不分隔,例如。 2011-04-29T14:54:00-0400

嘗試更改localDate字符串中時區的格式。