【发布时间】:2021-06-08 22:37:33
【问题描述】:
如何处理新年和去年回归的ISO8601作为年组件。
令我惊恐的是,我意识到 ISO8601DateFormatter 将 1977 年作为一年返回到 1978-01-01 00:00:00
花了一段时间才意识到这一点。事实证明这并没有错。尽管如此,考虑到 1978 年的具体年份,格式化返回 1977 年是令人震惊的。
我什至不需要时间戳。我怎样才能可靠地检索指定的年份,而不必在每个日历日期添加一秒?
import Foundation
let datestring = "1978/1/1"
var formatter = ISO8601DateFormatter()
formatter.timeZone = TimeZone(abbreviation: "UTC")
formatter.formatOptions = [.withFullDate]
let date2 = formatter.date(from: datestring) ?? Date()
print(date2)
var calendar = Calendar(identifier: .iso8601)
var year = calendar.component(.year, from: date2)
var month = calendar.component(.month, from: date2)
var day = calendar.component(.day, from: date2)
var era = calendar.component(.era, from: date2)
print("year \(year) month \(month) day \(day) era: \(era)")
===
1978-01-01 00:00:00 +0000
year 1977 month 12 day 31 era: 1
【问题讨论】:
-
看看小时也会很有趣 - 也许是时区的事情。
-
@chux-ReinstateMonica:我认为这只是闰秒(1977 年 12 月 31 日),图书馆似乎第一次使用这样的时间戳。 (posix 时间戳不考虑闰秒)
标签: swift date calendar iso8601