NetTime
NetTime 是一组小的数据类型,用于表示日期和时间
- LocalTime:不与日期或时区相关联的一天中的时间。
- LocalDate:代表任何时区或日历中整整一天的一个日期。
- LocalDateTime:不依赖于时区或日历的时间和日期。
- TimeOffset:与时区的时间差(小时和分钟)。
- DateTime:在格里历当前纪元中,UTC 和公元 0000 年到 9999 年之间的某个时间点。
每种类型都能从指定的 RFC 3339 字符串格式中进行序列化和反序列化。
let date = DateTime(staticRFC3339String: "1979-05-27T00:32:00.999999-07:00")
// Original representation is preserved. For example:
date.time.secondFraction // [9, 9, 9, 9, 9, 9]
// Serialize back to RFC 3339 timestamp.
date.description // 1979-05-27T00:32:00.999999-07:00
// Use it with Foundation:
Foundation.Date(timeIntervalSinceReferenceDate: date.timeIntervalSince2001)
Foundation.TimeZone(secondsFromGMT: date.utcOffset.asSeconds)
为什么?
但是,你可能会问,为什么不用 Foundation.Date
呢?
结果,当你考虑到不同的日历和时区时,时间表示很困难。但有时可以忽略这个问题。这就是为什么存在 RFC 3339 的原因:“为了提高在 Internet 协议中表示和使用日期和时间的致性和互操作性。” 简而言之,一致性和互操作性 不仅仅局限于网络协议。
此外,将时间戳转换为内存中的对象,如 TimeInterval
或 Foundation.Date
,是一种破坏性操作:原始的时间表示丢失了。想知道使用了什么时区偏移量?对秒的分数部分有意的精度是多少?很遗憾。NetTime 保留所有信息在一个符合 RFC 3339 标准的时间戳中。
安装
CocoaPods
使用use_frameworks!
pod "NetTime"
Carthage
使用github "dduan/NetTime"
SwiftPM
使用.package(url: "http://github.com/dduan/NetTime", from: "0.2.3")
注意
不要使用 NetTime的数据类型作为直接显示给最终用户的时间源。请使用像Foundation.DateFormatter
这样的工具,并遵循最佳实践。切不可假设自己对时区和/或日历有足够的了解来格式化日期字符串!
许可证
MIT. 查看 LICENSE.md
.