我正在使用NSDateFormatter從服務器時間字符串生成NSDate對象。我們使用ISO-8601擴展,並且在下面的方法我有一個返回的日期格式,處理轉型:NSDateFormatter返回無與表面上正確的格式字符串
+ (NSDateFormatter *) dateFormatter {
NSDateFormatter * dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSZ";
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier: @"en_US_POSIX"];
return dateFormatter;
}
然而,當我使用該代碼,下面的斷言失敗:
NSDateFormatter * dateFormatter = [MyClass dateFormatter];
// "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
_testDateObject = [dateFormatter dateFromString: @"2016-01-18'T'16:31:16.401Z"];
NSParameterAssert(_testDateObject);
我使用的日期格式字符串有什麼問題?我試過了它的變體(比如逃離文字),並且它們都沒有產生有效的NSDate
。
編輯 我原來的文章包含了我使用的不正確的格式化字符串。正如rmaddy指出的那樣,我應該使用yyyy-MM-dd'T'HH:mm:ss.SSSZ
,這就是我。
閱讀的文檔日期格式說明符。閱讀你應該使用的年,日和小數秒.. – rmaddy
密切相關:[無NSDate當試圖從祖魯時間的UTC字符串獲取日期](http://stackoverflow.com/q/1263455) –
規範http://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table'DD'是一年中的第一天(1..356)。 'YYYY'不是日曆年。 'sss'是幾秒鐘。 'SSS'是小數秒。 – Sulthan