我正在编写一个iOS应用,我需要使用Swift在用户的本地时间中知道午夜(即第二天的12:00:00.000)之前的(整个)毫秒数。
该应用程序是这样的表达式:
let milliseconds_until_midnight : Int;
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(milliseconds_until_midnight)) {
//do_something
}
Run Code Online (Sandbox Code Playgroud)
我们应该怎么做?附录:类型必须为Int,因为在此特定情况下不接受UInt64。
您可以使用Calendar方法nextDate(after:)来获取第二天的开始时间,可以使用Date方法timeIntervalSince(date:)来找出到第二天为止的秒数,然后将其乘以1000即可:
extension Date {
var startOfNextDay: Date {
return Calendar.current.nextDate(after: self, matching: DateComponents(hour: 0, minute: 0), matchingPolicy: .nextTimePreservingSmallerComponents)!
}
var millisecondsUntilTheNextDay: TimeInterval {
return startOfNextDay.timeIntervalSince(self) * 1000
}
}
Run Code Online (Sandbox Code Playgroud)
游乐场测试:
let milliseconds = UInt64(Date().millisecondsUntilTheNextDay) // 7731021
Run Code Online (Sandbox Code Playgroud)