gpt4 book ai didi

ios - 在 Swift 2 中使用 NSDateComponents 计算下个月开始的奇怪日期结果

转载 作者:行者123 更新时间:2023-11-28 12:54:13 25 4
gpt4 key购买 nike

我有一个函数:

internal func startOfNextMonth() -> NSDate? {
guard
let cal: NSCalendar = NSCalendar.currentCalendar(),
let comp: NSDateComponents = NSDateComponents() else { return nil }
comp.month = 1
comp.day = 0
comp.to12pm()
let date = cal.dateByAddingComponents(comp, toDate: self.startOfMonth()!, options: [])!
return date
}

这应该计算下个月的第一天,但​​它返回 2016-03-02 08:00:00 UTC

这是否与闰年有关(2 月 29 日搞砸了?)

这是我的 startOfMonth 函数供引用,以及 to12pm() 扩展:

internal func startOfMonth() -> NSDate? {
guard
let cal: NSCalendar = NSCalendar.autoupdatingCurrentCalendar(),
let comp: NSDateComponents = cal.components([.Year, .Month], fromDate: self.at12pm()!) else { return nil }
comp.to12pm()
return cal.dateFromComponents(comp)!
}

internal extension NSDateComponents {
func to12pm() {
self.hour = 12
self.minute = 0
self.second = 0
}
}

internal func at12pm() -> NSDate? {
let cal = NSCalendar.currentCalendar()
return cal.dateBySettingHour(12, minute: 0, second: 0, ofDate: self, options: [])
}

最佳答案

startOfMonth() 返回下个月第一天的中午 12 点 (12:00),然后您在 startOfNextMonth() 中再添加 12 小时,结果提前一天。

NSCalendar 有一个聪明的方法来计算下个月的开始,而不管夏令时的变化或其他不规则性

let calendar = NSCalendar.currentCalendar()
let components = NSDateComponents()
components.day = 1
let startOfNextMonth = calendar.nextDateAfterDate(NSDate(), matchingComponents: components, options: .MatchNextTime)

关于ios - 在 Swift 2 中使用 NSDateComponents 计算下个月开始的奇怪日期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35466368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com