Date.FormatStyle 是 Swift 中一个专门用于格式化日期和时间的类型,它是 Foundation 框架的一部分。通过这个类型,可以轻松地定义日期和时间的显示格式,适配不同的场景和区域化需求。
从 Swift 5.5 和 iOS 15 开始,Apple 引入了这个 API,用以提供更灵活且可读的日期格式化方式。
功能和特点
1、自定义格式:
通过指定年份、月份、日期、小时、分钟等组件的格式,完全自定义日期的输出形式。
2、区域化支持:
格式化输出会自动适配指定的 Locale,如美国日期格式和中国日期格式可以有不同的显示。
3、类型安全:
它避免了传统字符串模板(如 “yyyy-MM-dd”)带来的错误,使用方法更直观。
4、适配 SwiftUI:
在 SwiftUI 中,Date.FormatStyle 可以直接传递给 Text 等组件,用于日期的显示。
常见的格式化选项
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(_:):分钟和秒的显示方式。
2、区域化和时区
.locale(_:):设置区域化语言,例如 Locale(identifier: “en_US”) 或 Locale(identifier: “zh_CN”)。
.timeZone(_:):指定时区,例如 TimeZone.current。
3、默认样式
.date:仅显示日期部分,例如 2025-01-14。
.time:仅显示时间部分,例如 13:45:30。
.dateTime:显示完整的日期和时间,例如 2025-01-14 13:45:30。
使用示例
自定义日期格式
let date = Date()
let formattedDate = date.formatted(
Date.FormatStyle()
.year(.defaultDigits)
.month(.twoDigits)
.day(.twoDigits)
.hour(.twoDigits(amPM: .abbreviated))
.minute(.twoDigits)
.locale(Locale(identifier: "en_US"))
)
print(formattedDate) // 输出类似 " 01/14/2025, 11:01 AM"
与 SwiftUI 配合
struct ContentView: View {
var body: some View {
Text(Date(), format: Date.FormatStyle.dateTime)
}
}
使用区域化
let date = Date()
let chineseDate = date.formatted(
.dateTime
.year()
.month(.wide)
.day()
.locale(Locale(identifier: "zh_CN"))
)
print(chineseDate) // 输出类似 "2025年1月14日"
总结
Date.FormatStyle 提供了强大的日期格式化能力,特别是在需要国际化支持和自定义显示格式时非常有用。通过简单的链式调用,可以灵活地适配不同的日期/时间展示需求。