2010-11-14 112 views
8

我有什麼我以爲會是兩分鐘的任務,花費了太多的時間(超過一個小時)。 在iPhone:轉換前。 2010-09-11T00:00:00 + 01:00格式的NSDate

NSString * dateString = @"2010-09-11T00:00:00+01:00"; 
NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssTZD"]; 
NSDate *date = [formatter dateFromString:dateString]; 

結果:日期==零

我在想什麼! (除了我的最後期限)

問候,

+0

哈哈,我已經發布了完全相同的問題,10分鐘前:http://stackoverflow.com/questions/4179993 – samvermette 2010-11-14 22:26:42

回答

12

TZD是不是每一個the unicode spec定義格式化。您與別處鏈接的文檔是某人向W3C提出的建議,僅供討論。 Apple所遵循的unicode標準是來自不同機構的完成標準。

最接近你想要的是ZZZ(即,@「YYYY-MM-dd'T'HH:mm:ssZZZ」),但在中間沒有冒號。因此,您需要使用字符串:

2010-09-11T00:00:00+0100 

而不是您目前以+01:00結尾的那個。

E.g.如下:

NSString * dateString = @"2010-09-11T00:00:00+0100"; 
NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"]; 
NSDate *date = [formatter dateFromString:dateString]; 
NSLog(@"%@", date); 

記錄一個有效的日期對象,2010-09-10 23:00:00 GMT。

+0

謝謝你。正如我得到的時間碼兩種格式... + 01:00 ... Z即2010-09-11T00:00:00Z,只是要添加從+00刪除冒號:00時間碼和檢查Z,如果不存在,則在這種情況下將代碼更改爲YYYY-MM-dd'T'HH:mm:ssZ。 - 令人困惑的句子,但它遲了,我累了......謝謝! – gnasher 2010-11-15 02:53:51

2

提示:嘗試使用您的格式化程序一個NSDate對象轉換爲一個字符串,然後看看會發生什麼。在這方面調試通常比其他方式更容易。

你讀過嗎?

http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

這TZD在您的格式字符串的結尾看起來有點狡猾。

+0

TZD是時區指示符。請參閱:http://www.w3.org/TR/NOTE-datetime – gnasher 2010-11-14 22:46:37

+0

這是與NSDateFormatter使用的標準不同的標準。看看unicode.org鏈接。 – 2010-11-14 23:48:51

-1

我解決了使用this代碼這個問題。

+1

什麼代碼? 鏈接中斷。 – Brett 2016-10-27 04:39:32

相關問題