在 Swift 中完全不合逻辑的 Date() 值

问题描述 投票:0回答:1

当我尝试在某些月末向给定日期添加时间间隔时,我得到了不合逻辑的结果。

在下面的示例中,当我在给定日期的晚上 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
日历

中重现它
swift date swift-playground
1个回答
0
投票

使用

Calendar(identifier: .islamicCivil)
解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.