日期之间的错误差异
Posted
技术标签:
【中文标题】日期之间的错误差异【英文标题】:Wrong difference between dates 【发布时间】:2018-02-17 06:05:49 【问题描述】:我试图找出 2 个日期之间的差异。它返回几天的无效值。即使它以秒为单位返回错误的差异,也会导致无效的天数。
(lldb) po earliest
▿ 2038-01-16 22:42:52 +0000
- timeIntervalSinceReferenceDate : 1168987372.695472
(lldb) po self
▿ 2038-02-16 22:42:52 +0000
- timeIntervalSinceReferenceDate : 1171665772.695472
(lldb) po Calendar.current.dateComponents([.second], from: earliest, to: self)
▿ second: 2678399 isLeapMonth: false
- second : 2678399
- isLeapMonth : false
以秒为单位的差异应该是2678400
,我在一些在线日期差异网站上检查过这个。不知道为什么会发生这个奇怪的问题。
【问题讨论】:
Calendar.current.dateComponents([.day], from: early, to: date).day 显示 30,这是正确的。你期望什么价值? 您需要将 timeIntervalSinceReferenceDate 打印到更多小数位,以说明您获得结果的原因。 【参考方案1】:将字符串日期转换为日期格式并使用timeIntervalSince
计算它们之间的差异:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
let timeAtPress = dateFormatter.date(from: "2038-01-16 22:42:52 +0000")
let timeAtPress2 = dateFormatter.date(from: "2038-02-16 22:42:52 +0000")
let elapsed = timeAtPress2?.timeIntervalSince(timeAtPress!)
print(elapsed!) //2678400.0
对我来说Calendar.current.dateComponents
也给出了相同的结果:
let elapsed2 = Calendar.current.dateComponents([.second], from: timeAtPress!, to: timeAtPress2!)
print(elapsed2) //second: 2678400 isLeapMonth: false
【讨论】:
以上是关于日期之间的错误差异的主要内容,如果未能解决你的问题,请参考以下文章
计算两个日期之间的差异时出现 AWS Redshift 错误