簡體   English   中英

NSDateFormatter返回Nil,看似正確的格式字符串

[英]NSDateFormatter Returns Nil with Seemingly Correct Format String

我正在使用NSDateFormatter從服務器時間字符串生成NSDate對象。 我們使用的是ISO-8601擴展版,下面是一種我可以返回用於處理轉換的日期格式化程序的方法:

+ (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

您的問題是您的輸入字符串"2016-01-18'T'16:31:16.401Z"與您的格式不匹配。

在格式字符串中, '字符開始和結束轉義的字符序列。 子串的格式'T'的子串輸入匹配T不是輸入子串'T' 由於格式字符串中沒有任何內容與輸入中的單引號匹配,因此轉換失敗。

如果您確實希望輸入內容包含單引號,則必須使用雙引號格式的單引號來匹配它們, 使用單引號轉義T

let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'''T'''HH:mm:ss.SSSZ"
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")

let date = formatter.dateFromString("2016-01-18'T'16:31:16.401Z")

// Result:
"Jan 18, 2016, 10:31 AM"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM