Swift -如何创建只包含时间的date对象



我试图创建一个日期对象,只包含午夜过后1秒的时间。

我相信下面应该工作,但它只是不断返回nil.

let dateTime = Date()

let timeFormatter = DateFormatter()
timeFormatter.dateFormat = "HH:mm:ss"
let time = timeFormatter.date(from: "00:00:01")
print("Time: (time!)")

谁能告诉我我做错了什么?

感谢

Calendar做数学计算,这更可靠,无论如何您都没有使用当前日期(dateTime)

let midnight = Calendar.current.startOfDay(for: Date())
let oneSecondAfterMidnight = Calendar.current.date(byAdding: .second, value: 1, to: midnight)

即使午夜由于夏令时的变化而不存在,也可以工作。

Date不是"日期";以任何有意义的方式。它是一个特定的时间点,独立于任何日历或地点。你想表达的是日历上的一个点:"一秒钟"。过了日历上任意一个点,我们称之为"午夜"。这是用DateComponents完成的。

var dc = DateComponents()
dc.hour = 0
dc.minute = 0
dc.second = 1

这是任意日历上任意一天的第一个小时(00:00:01)的第一分钟的第二秒,也就是你所描述的。

更准确地说,是"零时、零分、一秒"。也就是"午夜过后一秒钟"如果你把它加到一些"午夜"。但除此之外,没有独立的"时间"。类型。这些东西只有应用到日历上才有意义。

(请记住,由于世界上一些地区(如伊朗)的夏时制改变,有时在同一天有两个午夜。所以当你要求这样的事情时,你需要非常清楚你的意思。你想要秒后午夜或只是第一个在给定的一天?)

最新更新