首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Date.ParseStrategy将字符串解析为SWIFT5.6中的日期?

如何使用Date.ParseStrategy将字符串解析为SWIFT5.6中的日期?
EN

Stack Overflow用户
提问于 2022-04-12 08:31:14
回答 1查看 270关注 0票数 2

我想解析一个yyyyMMdd格式的日期。

代码语言:javascript
复制
let strategy = Date.ParseStrategy(
    format: "\(year: .defaultDigits)\(month: .twoDigits)\(day: .twoDigits)",
    locale: Locale(identifier: "fr_FR"),
    timeZone: TimeZone(abbreviation: "UTC")!)

let date = try? Date("20220412", strategy: strategy) // nil :(

strategy有什么问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-12 08:53:55

问题是.defaultDigits不适用于这种日期格式的.year,原因很可能是因为该格式不包含分隔符,因此解析器无法自动推断用于年份部分的数字数。

如果我们试着用分离器,它会工作的很好。例如,yyyy

代码语言:javascript
复制
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:))

代码语言:javascript
复制
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) }

再一次打印

2022-04-12 00:00:00 +0000

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71839420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档