在斯威夫特的几个小时到午夜(当地时间)?

时间:2017-12-31 23:10:06

标签: ios swift time

我正在编写iOS应用程序,我需要知道用户当地时间到午夜(即第二天12:00:00.000)的(整数)毫秒数迅速的。

应用程序的表达式如下:

let milliseconds_until_midnight : Int;

DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(milliseconds_until_midnight)) {

  //do_something
}

我们怎么做?附录:类型必须是Int,因为在这种特殊情况下不接受UInt64。

2 个答案:

答案 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)

我很确定它有效,因为我必须为截止日期系统编写自定义日期类。