AnyDate

Awesome Swift Carthage compatible Version License CI Status Codecov Platform Jazzy

灵感来源于 Java 8 DateTime API 的 Swift 日期 & 时间 API。

背景

我认为日期 & 时间 API 应该易用且准确。

Swift 之前的日期、时间、时区 API 使用起来很不方便。(创建、操作或任何其他事情都非常复杂。)

但是有一个非常棒的先驱,Java 8 全新的时间 API

Java 8 引入了全新的 API,可以更高效、更轻松地处理日期 & 时间,也就是 LocalDateTime、ZonedDateTime(JSR-310)。其主要思想是

这些思想可以很容易地移植到其他语言,例如 .Net 的 Rx 端口和其他语言。

所以,这就是 AnyDate,一个全新的 Swift 日期 & 时间 API,它与 Java 8 具有一致性。

特性

FAQ

用法

/// Before
let now1 = Date()
var calendar = Calendar.current
calendar.timeZone = TimeZone(identifier: "UTC")!

let day = calendar.components(.day, from: now1)

/// After
let now2 = ZonedDateTime(Clock.utc)
let day = now2.day
/// Before
let timeZone1 = TimeZone(identifier: "GMT+0900")!
let timeZone2 = TimeZone(identifier: "America/Argentina/Buenos_Aires")!

/// After
let clock1 = Clock(offsetHour: 9)
let clock2 = Clock(identifier: .americaArgentinaBuenosAires)
/// Before
var dateComponents = DateComponents()
dateComponents.year = 2000
dateComponents.month = 11
dateComponents.day = 30
dateComponents.hour = 11
dateComponents.minute = 51
dateComponents.second = 18
dateComponents.nanosecond = 1573

guard let date = Calendar.current.date(from: dateComponents) else {
    assertionFailure("Failed to create!")
    return
}

/// After
let date = LocalDateTime(
    year: 2000,
    month: 11,
    day: 30,
    hour: 11,
    minute: 51,
    second: 18,
    nanoOfSecond: 1573
)
let min = ZonedDateTime.min
let max = ZonedDateTime.max

let oldDate = ZonedDateTime(year: 1627, month: 2, day: 10, hour: 14, minute: 2, second: 18, nanoOfSecond: 1573, clock: .UTC)
let newDate = ZonedDateTime(year: 1627, month: 2, day: 10, hour: 14, minute: 2, second: 18, nanoOfSecond: 1574, clock: .UTC)
let equalDate = ZonedDateTime(year: 1627, month: 2, day: 10, hour: 14, minute: 2, second: 18, nanoOfSecond: 1573, clock: .UTC)

let isLessThan = min < oldDate
let isGreaterThan = max > newDate
let isLessThanOrEqual = oldDate <= equalDate
let isGreaterThanOrEqual = oldDate >= equalDate
let isEqual = oldDate == equalDate
let isLessThan = oldDate < newDate
/// 1000-01-07T11:51:18.000001573
let date = LocalDateTime(
    year: 1000,
    month: 1,
    day: 7,
    hour: 11,
    minute: 51,
    second: 18,
    nanoOfSecond: 1573
)
print(date)

/// Period(year: 1, month: 1, day: 9, hour: 2, minute: 3, second: 4, nano: 152)
let period = 1.year + 1.month + 1.week + 2.day + 2.hour + 3.minute + 4.second + 152.nanosecond

/// 1001-03-16T13:54:22.000001725
let newDate = date + period
print(newDate)

安装

CocoaPods:

pod 'AnyDate', '~> 1.2.0'

Carthage:

github "kawoou/AnyDate" ~> 1.2.0

Swift Package Manager:

import PackageDescription

let package = Package(
  name: "MyAwesomeApp",
  dependencies: [
    .Package(url: "https://github.com/kawoou/AnyDate", majorVersion: 1),
  ]
)

手动

您可以简单地将 Sources 文件夹拖放到您现有的项目中。

要求

更新日志

作者

特别感谢

许可证

AnyDate 基于 MIT 许可证。有关更多信息,请参见 LICENSE 文件。