当我尝试在某些月末向给定日期添加时间间隔时,我得到了不合逻辑的结果。
在下面的示例中,当我在给定日期的晚上 8:00 时间上添加 5 小时时,结果日期将是上午 1:00,这是预期的。但如果我添加 6 小时而不是 5 小时,结果将是以下日期之后的 2:00AM,这完全没有意义。
import SwiftUI
let calendar = Calendar(identifier: .islamic)
let formatter = DateFormatter()
formatter.calendar = calendar
formatter.dateFormat = "dd/MM/yyyy HH:mma"
let components = DateComponents(calendar: calendar, year: 1445, month: 7, day: 29, hour: 20, minute: 0, second: 0)
let givenDate = calendar.date(from: components)!
let after_5_hours = givenDate.advanced(by: 60 * 60 * 5)
let after_6_hours = givenDate.advanced(by: 60 * 60 * 6)
formatter.string(from: givenDate) // = "29/07/1445 20:00PM"
formatter.string(from: after_5_hours) // = "30/07/1445 01:00AM"
formatter.string(from: after_6_hours) // = "01/08/1445 02:00AM"
更新: 使用
islamic
日历时会出现此行为。我无法在gregorian
日历中重现它
使用
Calendar(identifier: .islamicCivil)
解决了问题。