问题是,对于这种日期格式,.defaultDigits
不适用于.year
,原因很可能是因为该格式不包含分隔符,因此解析器无法自动推断年份部分使用的位数.
如果我们try 使用分离器,它会很好地工作.例如yyyy-MM-dd
let strategy = Date.ParseStrategy(
format: "\(year: .defaultDigits)-\(month: .twoDigits)-\(day: .twoDigits)",
locale: Locale(identifier: "fr_FR"),
timeZone: TimeZone(abbreviation: "UTC")!)
if let date = try? Date("2022-04-12", strategy: strategy) { print(date) }
输出
2022-04-12 00:00:00 +0000
不带分隔符的格式的解决方案是使用.padded
(另一个选项是.extended(minimumLength:)
)明确地告诉策略年份部分包含多少位数
let strategy = Date.ParseStrategy(
format: "\(year: .padded(4))\(month: .twoDigits)\(day: .twoDigits)",
locale: Locale(identifier: "fr_FR"),
timeZone: TimeZone(abbreviation: "UTC")!)
if let date = try? Date("20220412", strategy: strategy) { print(date) }
again 输出
2022-04-12 00:00:00 +0000