如何处理新年和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
默认情况下,日历实例将具有本地时区。您可以通过打印print(calendar.timeZone.abbreviation() ?? "UNKNOWN")
来看到这一点。在我的情况下(在美国华盛顿州西雅图(;PDT";。如果你只需将日历时区设置为UTC,它就会打印出你所期望的内容:
1978年1月1日1时代:1