NSDateFormatter Returns Nil 看似正确的格式字符串
NSDateFormatter Returns Nil with Seemingly Correct Format String
我正在使用 NSDateFormatter 从服务器时间字符串生成 NSDate 对象。我们使用的是 ISO-8601 Extended,下面是我的方法 returns 一个处理转换的日期格式化程序:
+ (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);
我使用的日期格式字符串有什么问题?我试过对其进行变体(例如转义文字),其中 none 产生有效的 NSDate
.
编辑
我原来的 post 包含我使用的不正确的格式字符串。正如 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"
我正在使用 NSDateFormatter 从服务器时间字符串生成 NSDate 对象。我们使用的是 ISO-8601 Extended,下面是我的方法 returns 一个处理转换的日期格式化程序:
+ (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);
我使用的日期格式字符串有什么问题?我试过对其进行变体(例如转义文字),其中 none 产生有效的 NSDate
.
编辑
我原来的 post 包含我使用的不正确的格式字符串。正如 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"