[英]Calendar.nextDate() is acting really weird when using .backward for direction. Only for the last day of the month
[英]How to find the next hourly time using Calendar nextDate method in Swift
我想找到下一個小時的時間。 例如
現在是:格林尼治標准時間+10 4/9/16,上午10:12:34我要獲取格林尼治標准時間+10上午4/9 / 16,11:00:00
所以我嘗試使用Calendar.current.nextDate,但是得到了奇怪的響應。 示例代碼如下。
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .short
dateFormatter.timeStyle = .long
var dateComponents = DateComponents()
dateComponents.minute = 0
dateComponents.second = 0
let beginDate = Date(timeIntervalSince1970: 0)
var beginDateComponents = Calendar.current.dateComponents(in: TimeZone.current, from: beginDate)
beginDateComponents.minute = 0
beginDateComponents.second = 0
let modifiedDate = Calendar.current.date(from: beginDateComponents)!
let nextHourlyTime = Calendar.current.nextDate(after: modifiedDate, matching: dateComponents, matchingPolicy: .nextTime)!
print("modifiedDate: \(dateFormatter.string(from: modifiedDate))")
print("beginDate: \(dateFormatter.string(from: beginDate))")
print("nextHourlyTime: \(dateFormatter.string(from: nextHourlyTime))")
/*
modifiedDate: 1/1/70, 10:00:00 AM GMT+10
beginDate: 1/1/70, 10:00:00 AM GMT+10
nextHourlyTime: 1/2/70, 12:00:00 AM GMT+10
*/
但是,如果我輸入注釋代碼:“ dateComponents.second = 0”,那么我將獲得正確的答案。
蘋果的nextDate API是否有問題?
錯誤發生在您的beginDate。 應該將其設置為Date()
而不是Date(timeIntervalSince1970: 0)
。 您可以按照以下步驟進行操作:
extension Date {
var nextHourShift: Date? {
return Calendar.current.nextDate(after: self, matching: DateComponents(minute: 0), matchingPolicy: .nextTime)
}
}
Date().nextHourShift // "Sep 3, 2016, 4:00 AM"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.