簡體   English   中英

如何在Swift中使用Calendar nextDate方法查找下一個小時時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM