NaiveDate0.4

NaiveDate0.4

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2019年4月
SPM支持 SPM

kean 维护。



NaiveDate

Date 类型非常适合处理时区(例如 2017-09-29T15:00:00+0300),但是,在某些情况下,人们可能希望使用 天真 的日期和时间。

使用方法

库实现了三种类型

  • NaiveDate(例如 2017-09-29
  • NaiveTime(例如 15:30:00
  • NaiveDateTime(例如 2017-09-29T15:30:00 - 无时区和偏移量)

每个类型都实现了 EquatableComparableLosslessStringConvertibleCodable 协议。天真类型还可以转换为 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”,是因为它们没有与它们相关联的时间区。这意味着日期可能实际上在世界的一些地区不存在,尽管它们是“有效的”。例如,当应用夏令时时钟通常会向前或向后移动一小时。这意味着某些日期永远不会发生,或者可能发生多次。如果您需要对时间进行任何精确操作,请始终使用原生的DateCalendar

要求

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文件。