gpt4 book ai didi

swift - 使用 DateComponents 减去 2 个日期给出未定义的行为

转载 作者:行者123 更新时间:2023-11-28 10:46:37 27 4
gpt4 key购买 nike

鉴于我在扩展中添加到 Date 对象的以下方法:

extension Date {
static func -(left: Date, right: Date) -> DateComponents {
let components: Set<Calendar.Component> = [
.year,
.month,
.day,
.hour,
.minute,
.second,
//.weekOfYear, // issue!
]

let gregorian = Calendar(identifier: .gregorian)
let dateComponents = gregorian.dateComponents(components, from: right, to: left)
return dateComponents
}
}

给定以下日期(格式为月日、年、hh:mm:ss)你得到 1:

let day1 = Date(timeIntervalSince1970: 1516003200) // January 15, 2018, 00:00:00
let day2 = Date(timeIntervalSince1970: 1516089600) // January 16, 2018, 00:00:00
let diff = day2 - day1
print(diff.day!) // 1

但给定以下日期,您还会得到 1:

let day3 = Date(timeIntervalSince1970: 1515916800) // January 14, 2018, 00:00:00
let day4 = Date(timeIntervalSince1970: 1516089600) // January 16, 2018, 00:00:00
let diff2 = day4 - day3
print(diff.day!) // 1

所以我的第一个问题是想知道为什么即使一对相隔 1 天而另一个相隔 2 天,但天差还是相同。

最后,给定以下日期,您得到正确的数字 14:

let day5 = Date(timeIntervalSince1970: 1516089600) // January 16, 2018, 00:00:00
let day6 = Date(timeIntervalSince1970: 1517299200) // January 30, 2018, 00:00:00
let diff3 = day6 - day5
print(diff3.day!)

但是如果你要返回到 static func -(left:right:) 并取消注释 .weekOfYear 并使用 重新运行上面的代码块第 5 天第 6 天 你得到 0 天。所以我的第二个问题是如果我将 .weekOfYear 组件添加到集合中,为什么我得到 0 天。

我在下面包含了两个 Playground 的屏幕截图,第一个没有包括 .weekOfYear,第二个包括 .weekOfYear:

<code>.weekOfYear</code> commented out

<code>.weekOfYear</code> included

最佳答案

在下面的代码中

let day3 = Date(timeIntervalSince1970: 1515916800) // January 14, 2018, 00:00:00
let day4 = Date(timeIntervalSince1970: 1516089600) // January 16, 2018, 00:00:00
let diff2 = day4 - day3
print(diff.day!) // 1

你正在使用 diff.day 而实际上你应该使用 diff2.day

至于你的第二个问题,日历将通过从最大到最小分配返回日期组件。也就是说,当您添加 weekOfYear 时,它会将值 2 赋给 weekOfYear。如果你要打印出 diff3.weekOfYear,你会得到 2(因为日期是 2 周)。由于日期转换为周后没有剩余天数,因此 diff3.day 为 0 天。如果您要使用日期 1 月 16 日1 月 31 日,您将获得 2 表示周和 1 表示日的值

关于swift - 使用 DateComponents 减去 2 个日期给出未定义的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48333048/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com