gpt4 book ai didi

swift - 测试一天中的当前时间是否在两个 TimeIntervals 之间

转载 作者:可可西里 更新时间:2023-11-01 01:16:51 26 4
gpt4 key购买 nike

我有 2 TimeIntervals ,它只代表一天中与日期无关的时间(例如 8:00 AM 和 5:00 PM)。所以 0 代表恰好是午夜,在这种情况下,29,040 代表上午 8:04。我想检查手机的时间是否在这两个时间之间TimeIntervals .

我发现了一些类似的 Stack Overflow 问题,但没有一个真正涉及 TimeIntervals .好像只是使用 start <= Date().timeIntervalSinceReferenceDate <= end否则某些东西将无法工作,因为它会返回巨大的值(value)。

在 Swift 3 中处理这种情况的最佳方法是什么?

编辑:澄清一下,我不需要担心夏令时之类的事情。例如,假设用户只希望应用程序中的某些事情发生在 X 和 Y 之间,其中 X 和 Y 以 TimeInterval 的形式提供给我自午夜以来的值(value)。所以检查手机的 TimeInterval 应该就足够了因为通常一天的午夜在完成操作之前的 X 和 Y 之间。

最佳答案

Date().timeIntervalSinceReferenceDate 返回自 2000 年 1 月 1 日以来的秒数,因此毫无疑问这是一个巨大的数字。

由于这个叫做夏令时的烦人的小东西,不建议将时间存储为自午夜以来的秒数。每年,不同的国家在不同的日子和不同的时间进行。例如,尽管英国和法国在同一天(2017 年 3 月 26 日)更改了时钟,但其中一个是从 1AM to 2AM 开始的。 , 另一个来自 2AM to 3AM .这很容易弄得一团糟!

改用DateComponents:

let calendar = Calendar.current
let startTimeComponent = DateComponents(calendar: calendar, hour: 8)
let endTimeComponent = DateComponents(calendar: calendar, hour: 17, minute: 30)

let now = Date()
let startOfToday = calendar.startOfDay(for: now)
let startTime = calendar.date(byAdding: startTimeComponent, to: startOfToday)!
let endTime = calendar.date(byAdding: endTimeComponent, to: startOfToday)!

if startTime <= now && now <= endTime {
print("between 8 AM and 5:30 PM")
} else {
print("not between 8 AM and 5:30 PM")
}

关于swift - 测试一天中的当前时间是否在两个 TimeIntervals 之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45968640/

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