NaiveDate
Date
类型非常适合处理时区(例如 2017-09-29T15:00:00+0300
),但是,在某些情况下,人们可能希望使用 天真 的日期和时间。
使用方法
库实现了三种类型
NaiveDate
(例如2017-09-29
)NaiveTime
(例如15:30:00
)NaiveDateTime
(例如2017-09-29T15:30:00
- 无时区和偏移量)
每个类型都实现了 Equatable
、Comparable
、LosslessStringConvertible
、Codable
协议。天真类型还可以转换为 Date
、和 DateComponents
。
创建
可以从字符串(使用预定义的格式)、使用 Decodable
或通过成员初始化器创建天真日期和时间。
NaiveDate("2017-10-01")
NaiveDate(year: 2017, month: 10, day: 1)
NaiveTime("15:30:00")
NaiveTime(hour: 15, minute: 30, second: 0)
NaiveDateTime("2017-10-01T15:30")
NaiveDateTime(
date: NaiveDate(year: 2017, month: 10, day: 1),
time: NaiveTime(hour: 15, minute: 30, second: 0)
)
格式
格式化日期,无需担心时区问题
let date = NaiveDate("2017-11-01")!
NaiveDateFormatter(dateStyle: .short).string(from: date)
// prints "Nov 1, 2017"
let time = NaiveTime("15:00")!
NaiveDateFormatter(timeStyle: .short).string(from: time)
// prints "3:00 PM"
let dateTime = NaiveDateTime("2017-11-01T15:30:00")!
NaiveDateFormatter(dateStyle: .short, timeStyle: .short).string(from: dateTime)
// prints "Nov 1, 2017 at 3:30 PM"
转换
当你确实需要时区时,将NaiveDate
转换为Date
let date = NaiveDate(year: 2017, month: 10, day: 1)
// Creates `Date` in a calendar's time zone
// "2017-10-01T00:00:00+0300" if user is in MSK
Calendar.current.date(from: date)
let dateTime = NaiveDateTime(
date: NaiveDate(year: 2017, month: 10, day: 1),
time: NaiveTime(hour: 15, minute: 30, second: 0)
)
// Creates `Date` in a calendar's time zone
// "2017-10-01T15:30:00+0300" if user is in MSK
Calendar.current.date(from: dateTime)
重要! 这些类型之所以称为“naive”,是因为它们没有与它们相关联的时间区。这意味着日期可能实际上在世界的一些地区不存在,尽管它们是“有效的”。例如,当应用夏令时时钟通常会向前或向后移动一小时。这意味着某些日期永远不会发生,或者可能发生多次。如果您需要对时间进行任何精确操作,请始终使用原生的Date
和Calendar
。
要求
NaiveDate | Swift | Xcode | 平台 |
---|---|---|---|
NaiveDate 0.4 | Swift 4.2 – 5.0 | Xcode 10.1 – 10.2 | iOS 10.0 / watchOS 3.0 / macOS 10.12 / tvOS 10.0 |
NaiveDate 0.3 | Swift 4.0 – 4.2 | Xcode 9.2 – 10.1 | iOS 10.0 / watchOS 3.0 / macOS 10.12 / tvOS 10.0 |
许可证
NaiveDate在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。