繁体   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