翻译:Swift5 使用日期类型:Date、DateFormatter、DateComponent

1. 日期

日期是一个特定的时间点,独立于任何日历或时区。
要创建一个初始化为当前日期和时间的日期对象,只需像这样写:

let date = Date()

如果您在 Playground 上运行它,实时视图中显示的日期对象可能看起来与打印出来的有点不同。这是因为实时视图中显示的 Date 对象显示了系统的当前日期和时间。当您打印出来时,它会以 ISO 8601 格式的 UTC 时间显示日期信息。我在 GMT+8 时区,所以比我打印出来的时间早 8 小时。

2021-06-08 07:18:29 +0000

2. 日期格式化程序

DateFormatter 在日期和它们的文本表示之间进行转换。
您可能希望以特定样式显示信息,那么您需要 DateFormatter 的帮助。

2.1 预定义样式

Apple 提供了多种格式,您可以直接应用。创建一个 DateFormatter 对象,并设置其dateStyle和timeStyle属性以满足您的需要。

let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .full
dateFormatter.timeStyle = .full
let dateStr = dateFormatter.string(from: date)
print(dateStr)
// print: Thursday, November 5, 2020 at 10:16:33 PM Taipei Standard Time

以下示例来自文档,展示了两种样式的功能。请注意,确切的格式取决于区域设置、用户首选项设置和操作系统版本。
在这里插入图片描述

2.2 自定义样式

有一种更灵活的方式来定义日期格式。如果使用预定义的样式无法实现您想要的格式,请使用setLocalizedDateFormatFromTemplate(_😃.
例如,我只想用日历年的所有四位数字显示数字,但以上预定义的样式都不能实现,然后我可以指定自定义格式 string “yyyyMMdd”。DateFormatter 将提供具有我指定样式的本地化日期表示。

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: “en_US”)
dateFormatter.setLocalizedDateFormatFromTemplate(“yyyyMMdd”)
let dateStr = dateFormatter.string(from: Date())
print(dateStr)
// Results of different locale settings
// en_US: 11/12/2020
// en_GB: 12/11/2020
// zh_TW: 2020/11/12
// de_DE: 12.11.2020

2.3 固定样式

使用dateFormat是另一种自定义日期格式的方法,但您应该只在使用固定格式表示时设置此属性。

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE, dd MMM yyyy"
let dateStr = dateFormatter.string(from: date)
print(dateStr)
// Results of different dateFormat settings
// "EEEE, dd MMM yyyy": Thursday, 05 Nov 2020
// "yyyyMMMdd"        : 2020Nov05
// "yyyy-MMM-dd"      : 2020-Nov-05"
// "dd/MMM/yyyy"      : 05/Nov/2020

为同一个 DateFromatter 对象同时设置dateFormat和dateStyle/是矛盾的timeStyle。在这种情况下,将应用后来的书写格式。
更多日期格式

2.4 语言环境

区域设置是一组参数,用于定义用户的语言、区域以及用户希望在其用户界面中看到的任何特殊变体首选项——通常区域设置标识符至少包含一个语言标识符和一个区域标识符。
区域设置可以与dateStyle和 一起使用timeStyle。region 参数影响日期格式的顺序。例如,在英国,人们可能更喜欢看到日/月/年,而在台湾习惯上显示年/月/日。
要以特定区域的首选样式显示日期信息,请指定 DateFormatter 的locale.

dateFormatter.locale = Locale(identifier: "en_GB")
// Wednesday, 4 November 2020 at 17:01:47 Taipei Standard Time
dateFormatter.locale = Locale(identifier: "de_DE")
// Mittwoch, 4. November 2020 um 17:04:59 Taipeh-Normalzeit
dateFormatter.locale = Locale(identifier: "zh_Hant_TW")
// 2020年11月4日 星期三 台北標準時間 下午5:02:50
dateFormatter.locale = Locale(identifier: "jp_JP")
// 2020年11月4日 水曜日 17時04分04秒 台北標準時

3. 日期组件

DateComponents 表示以单位(例如年、月、日、小时和分钟)表示的日期
以下示例显示了我运行程序的日期和时间。

let dateComponents = Calendar.current.dateComponents(in: .current, from: Date())
let year = dateComponents.year       // 2020
let month = dateComponents.month     // 11
let weekday = dateComponents.weekday // 4
let hour = dateComponents.hour       // 10
let minute = dateComponents.minute   // 30
let second = dateComponents.second   // 9
let date = dateComponents.date       // Nov 4, 2020 at 10:30 AM

参考

https://medium.com/swlh/swift-working-with-dates-1-basic-types-date-dateformatter-datecomponent-4bfc376ee93b

https://medium.com/geekculture/swift-work-with-dates-2-create-parse-and-format-dates-fbb62ddd330f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值