NSDateFormatter的dateFromString:在iOS 11中返回nil

问题描述 投票:1回答:2

我有这个代码:

NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.dateStyle = NSDateFormatterLongStyle;
dateFormatter.timeStyle = NSDateFormatterLongStyle;

NSDate *myDate = [dateFormatter dateFromString:@"2016-03-01 13:42:17"];

对于<iOS 11,找到预期日期,但对于iOS 11(在iOS 11.1的iPhone中测试),这将返回nil

我没有在Apple的doc中看到dateFromString:的任何API更改。怎么了?

ios objective-c iphone ios11
2个回答
5
投票

基本上不要使用日期/时间样式来转换日期字符串。样式表示不同语言环境中的不同字符串。

请改用固定的日期格式,并将语言环境设置为en_US_POSIX

NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

NSDate *myDate = [dateFormatter dateFromString:@"2016-03-01 13:42:17"];

1
投票

@Vadian的回答也适用于Swift!谢谢! :)

这是Swift版本:

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

Date myDate = dateFormatter.date(from: "2016-03-01 13:42:17")
© www.soinside.com 2019 - 2024. All rights reserved.