Calendar.current.date上的无限循环(bySetting:value:of :)

时间:2017-11-08 15:49:50

标签: ios swift date calendar

在尝试获取特定月份的第一天时,我遇到了与Calendar API有些奇怪的事情。

import Foundation

//2017-12-01 23:00:00 +0000
let date = Date(timeIntervalSinceReferenceDate: 533862000.0)

let secondDate = Calendar.current.date(bySetting: .day, value: 2, of: date)
let thirdDate = Calendar.current.date(bySetting: .day, value: 1, of: date)

print("Passed")

在Swift 4 Playground中,右侧的属性观察者显示datesecondDate的值,但在评估let thirdDate = ...表达式时进入无限循环。

活动指标报告99%的CPU使用率和RAM使用率增加大约+ 100MB /秒,在iOS项目中运行时,XCode中的Debug Navigator也是如此(直到应用程序在大约1.3GB的RAM使用率下被杀死)< / p>

这并非适用于所有日期,但与此特定date一致。

我已经浏览了Calendar的文档,但我无法弄清楚为什么会发生这种情况。

我想出了一个像这样的解决方法:

let date = Calendar.current.startOfDay(for: someDate)
var dc = Calendar.current.dateComponents([.month, .year, .day], from: date)
dc.day = 1
let firstDayOfMonth = Calendar.current.date(from: dc)

但是我非常希望得到一个解释,为什么Calendar.current.date(bySetting: .day, value: 1, of: date)失败了。我在这里错过了什么吗?

编辑:它发生在时区GMT + 2,但如果我将系统设置更改为GMT + 1则不会再出现。

0 个答案:

没有答案