我想数一数离午夜还剩下多少小时。我找到了大量关于制作倒数计时器的教程,但我找不到任何用于计算剩余时间的教程。
任何想法我应该怎么做?
谢谢!
更简单的解决方案:
let now = Calendar.current.dateComponents(in: TimeZone.current, from: Date())
let hoursTillMidnight = 24 - now.hour!
print(hoursTillMidnight)
这没有考虑到分钟和秒之类的事情。下午 1:01 和下午 1:59 都是午夜前 11 小时。如果需要,您可以上下舍入小时。
<小时 />如果您的目标是较新的平台(iOS 13.5+,OS X 10.15 +),并且想要"10小时25分钟的午夜"之类的内容,则可以使用RelativeDateTimeFormatter
:
let now = Date()
let midnight = Calendar.current.nextDate(after: now, matching: DateComponents(hour:0), matchingPolicy: .nextTime)!
let formatter = RelativeDateTimeFormatter()
formatter.localizedString(for: midnight, relativeTo: now)
import Foundation
let calendar = NSCalendar.currentCalendar()
let noonToday = calendar.dateBySettingHour(12, minute: 0, second: 0, ofDate: NSDate(), options: [])!
let noonishTomorow = calendar.dateByAddingUnit(.Day, value: 1, toDate: noonToday, options: [])!
let midnight = calendar.startOfDayForDate(noonishTomorow)
let components = calendar.components([.Hour, .Minute], fromDate: NSDate(), toDate: midnight, options: [])
let hoursUntilMidnight = components.hour
let minutesUntilMidnight = components.minute
你必须非常小心"午夜",因为它并不总是存在,有时它存在两次,等等...... 这就是为什么苹果总是建议使用noon,就像我上面所做的那样。
避免任何告诉您明确将小时设置为午夜然后减去的答案。 你刚才说小时,但我给了你几分钟的时间,以防你需要看看如何做到这一点。
计算当前日期的剩余小时数:
在 Swift 5.2 中:
let now = Calendar.current.dateComponents(in: .current, from: Date())
if let currentHour = now.hour {
let hoursTillMidnight = 24 - currentHour
print(hoursTillMidnight)
}
希望这对那里的人有帮助!
干杯!
Gargoyle的代码不再构建。这是我测试过的 Swift 5 生产代码(没有强制展开)。
extension Date {
var minutesToMidnight: Int {
let calendar = NSCalendar.current
guard let noonishTomorow = calendar.date(bySetting: Calendar.Component.hour, value: 12, of: Date()) else {
return 0
}
let midnight = calendar.startOfDay(for: noonishTomorow)
let components = calendar.dateComponents([.hour, .minute], from: Date(), to: midnight)
var hoursUntilMidnight = components.hour ?? 0
var minutesLeftInHour = components.minute ?? 0
if minutesLeftInHour < 0 {
minutesLeftInHour += 60
hoursUntilMidnight -= 1
}
if hoursUntilMidnight < 0 {
hoursUntilMidnight += 24
}
print("(hoursUntilMidnight) hours and (minutesLeftInHour) minutes till midnight")
return hoursUntilMidnight * 60 + minutesLeftInHour
}
}