我正在尝试存储用户操作的
Date
数据,并将其设置为始终在一天开始时,无论用户何时执行该操作,即用户可以执行 30 个不同的操作,并且所有这些都存储在同一个Date
下
.
然而,以下结果会产生奇怪的结果(在撰写本文时是 6 月 29 日),但出于某种原因,日历
.startOfDay
会产生 28 日?
print(Date())
print(Calendar.current.startOfDay(for: Date()))
// 2024-06-29 14:30:18 +0000
// 2024-06-28 21:00:00 +0000
有没有办法确保尊重同一天?
后续,我尝试了这个替代方案,它产生了相同的结果(28)
let calendar = Calendar.current
var components = calendar.dateComponents([.year, .month, .day], from: date)
components.hour = 0
components.minute = 0
components.second = 0
return calendar.date(from: components) ?? .now
Date
是一种命名非常糟糕的类型。它与日期无关,而且它的description
(打印时看到的内容)只会通过暗示它可能使事情变得更糟。 Date
是时间上的一个瞬间,与位置或日历无关。它没有时区(需要位置)。这不是“某一天”(需要日历)。
.startOfDay
28 日不会返回。它返回您所在时区的 29 号 。 请注意,打印的 description
采用 UTC。您可能在 UTC+3 中运行它。如果你想锻炼一天,你想使用DateComponents
,配置正确的Calendar
和TimeZone
,而不是看Date
的“仅用于调试”字符串格式。