标准的 Date
类型非常适合处理时间戳和时区(例如 2024-09-29T15:00:00+0300
),但在某些情况下,您可能不知道或不在意时区。 这些类型的日期通常被称为朴素日期。
NaiveDate
库实现了三种类型
NaiveDate
(例如 2024-09-29
)NaiveTime
(例如 15:30:00
)NaiveDateTime
(例如 2024-09-29T15:30:00
- 没有时区,也没有偏移量)。它们都实现了 Equatable
、Comparable
、LosslessStringConvertible
和 Codable
协议。 朴素日期类型也可以转换为 Date
和 DateComponents
。
朴素日期和时间可以从字符串创建(使用预定义的格式 – RFC 3339),使用 Decodable
,或使用成员逐一初始化器。
NaiveDate("2024-10-01")
NaiveDate(year: 2024, month: 10, day: 1)
NaiveTime("15:30:00")
NaiveTime(hour: 15, minute: 30, second: 0)
NaiveDateTime("2024-10-01T15:30")
NaiveDateTime(
date: NaiveDate(year: 2024, month: 10, day: 1),
time: NaiveTime(hour: 15, minute: 30, second: 0)
)
NaiveDate
支持 Foundation.FormatStyle
let dateTime = NaiveDateTime("2024-11-01T15:30:00")!
dateTime.formatted(date: .numeric, time: .standard)
// prints "11/1/2024, 3:30:00 PM"
除了格式样式外,您还可以直接使用内置的 NaiveDateFormatter
。
let date = NaiveDate("2024-11-01")!
NaiveDateFormatter(dateStyle: .short).string(from: date)
// prints "Nov 1, 2024"
let time = NaiveTime("15:00")!
NaiveDateFormatter(timeStyle: .short).string(from: time)
// prints "3:00 PM"
let dateTime = NaiveDateTime("2024-11-01T15:30:00")!
NaiveDateFormatter(dateStyle: .short, timeStyle: .short).string(from: dateTime)
// prints "Nov 1, 2024 at 3:30 PM"
当您确实需要处理时区时,只需将 NaiveDate
转换为 Date
。
let date = NaiveDate(year: 2024, month: 10, day: 1)
// Creates `Date` in a calendar's time zone
// "2024-10-01T00:00:00+0300" if user is in MSK
Calendar.current.date(from: date)
let dateTime = NaiveDateTime(
date: NaiveDate(year: 2024, month: 10, day: 1),
time: NaiveTime(hour: 15, minute: 30, second: 0)
)
// Creates `Date` in a calendar's time zone
// "2024-10-01T15:30:00+0300" if user is in MSK
Calendar.current.date(from: dateTime)
重要提示! 朴素类型之所以这样称呼,是因为它们没有关联的时区。 这意味着即使日期是“有效的”,它实际上可能在世界上的某些地区不存在。 例如,当应用夏令时更改时,时钟通常会向前或向后移动一小时。 这意味着某些日期永远不会出现,或者可能出现多次。 如果您需要对时间进行任何精确的操作,请始终使用原生的 Date
和 Calendar
。
NaiveDate(朴素日期) | Swift | 平台 |
---|---|---|
NaiveDate 1.1 | Swift 5.9 | iOS 13, tvOS 13, watchOS 6, macOS 10.15 |
NaiveDate 1.0 | Swift 5.3 | iOS 11, tvOS 11, watchOS 4, macOS 10.13 |
NaiveDate 在 MIT 许可下可用。 有关更多信息,请参见 LICENSE 文件。