SwiftUI Date格式化formatted
SwiftUI Date格式化formatted

SwiftUI Date格式化formatted

Date提供一个formatted方法,用于格式化日期和时间的类型,接收遵循FormatStyle的对象,属于 Foundation 框架。

从 Swift 5.5 和 iOS 15 开始,Apple 引入了这个 API,用以提供更灵活且可读的日期格式化方式。

基本用法

1、格式化日期

let now = Date()
let text = now.formatted(Date.FormatStyle().year().month().day())   // Dec, 8, 2025

2、格式化日期(链式)

now.formatted(
    .dateTime
        .year()
        .month()
        .day()
        .locale(Locale(identifier: "zh_CN"))
)

3、格式化(枚举)

now.formatted(date: .abbreviated, time: .shortened)

4、格式化(相对时间)

date.formatted(.relative(presentation: .numeric)) // 2 minutes ago

5、格式化(ISO标准)

date.formatted(.iso8601)    // 2024-10-06T22:04:16Z

格式化选项

1、基本格式化组件

.year(_:):年份显示方式,例如 .defaultDigits(四位数年份)或 .twoDigits(两位数年份)。

.month(_:):月份显示方式,例如 .twoDigits(数字形式:01月)、.abbreviated(缩写:1月)、.wide(完整拼写:一月)、.defaultDigits(缩写,1月)、. narrow(缩写,1)。

.day(_:):日期格式,例如 .twoDigits(01-31)。

.hour(_:):小时格式,例如 .defaultDigits 或 .twoDigits,可以选择是否包括 AM/PM。

.minute(_:) 和 .second(_:):分钟和秒的显示方式。

.weekday(_:):星期格式,例如.wide、.abbreviated或.narrow。

2、区域化和时区

.locale(_:):设置区域化语言,例如 Locale(identifier: “en_US”) 或 Locale(identifier: “zh_CN”)。

.locale(Locale(identifier: "zh_CN"))

.timeZone(_:):指定时区,例如 TimeZone.current。

.timeZone(.gmt)

.calendar(_:):设置日历。

.calendar(.init(identifier: .iso8601))

3、date枚举

.omitted:忽略日期。

.numberic:数字化日期。例如,2024/10/6。

.abbreviated:月份缩写,年份不缩写。例如,Oct 6, 2024

.long:月份完整,年份完整。例如,October 6, 2024

.complete:星期+月份全称+年份:Sunday, October 6, 2024

注意:根据locale,显示本地化的日期字符串。

4、time枚举

.omitted:忽略时间。

.shortened:缩写时间。例如,22:04

.standard:标准写法。例如,22:04:30

.complete:完整写法,包括时区。例如,22:04:30 GMT+8

总结

旧DateFormatter存在可变状态、多配置、线程不安全、依赖字符串pattern。

FormatStyle则倾向值类型,明确的语义API、更安全,写法也更现代。

通过简单的链式调用,可以灵活地适配不同的日期/时间展示需求。

相关文章

1、SwiftUI DateFormatter日期格式化:https://fangjunyu.com/2024/10/06/swift-ui%e6%b7%b1%e5%85%a5%e7%90%86%e8%a7%a3dateformatter/

2、Swift格式化formatted():https://fangjunyu.com/2025/12/03/swift%e6%a0%bc%e5%bc%8f%e5%8c%96formatted/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注