我正在编写iOS应用程序,我需要知道用户当地时间到午夜(即第二天12:00:00.000)的(整数)毫秒数迅速的。
应用程序的表达式如下:
let milliseconds_until_midnight : Int;
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(milliseconds_until_midnight)) {
//do_something
}
我们怎么做?附录:类型必须是Int,因为在这种特殊情况下不接受UInt64。
答案 0 :(得分:5)
您可以使用日历方法nextDate(after:)
来获取第二天的开始,使用日期方法timeIntervalSince(date:)
找出直到第二天的秒数并返回它乘以1000:< / p>
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
}
}
游乐场测试:
let milliseconds = UInt64(Date().millisecondsUntilTheNextDay) // 7731021
答案 1 :(得分:0)
以下是在午夜之前倒计时秒数的代码:
extension Date{
// code to get phone's time zone
var localTimeZoneName: String { return TimeZone.current.identifier }
var numberOfMilliSecondsUntilMidnight: TimeInterval?{
let todayDate = self
let tomorrowDate = todayDate.tomorrowAtMidnight
return tomorrowDate.timeIntervalSince(self) * 1000
}
// local time. beginning tomorrow at 12 AM
var tomorrowAtMidnight: Date{
var cal = Calendar.current
cal.timeZone = TimeZone.current
let today = cal.startOfDay(for: self)
return Calendar.current.date(byAdding: .day, value: 1, to: today)!
}
}
要求任何刚接触swift的人:
print(Date().numberOfMilliSecondsUntilMidnight)
我很确定它有效,因为我必须为截止日期系统编写自定义日期类。