Swift:ISO 8601日期从星期和年份开始

时间:2018-07-31 18:12:49

标签: swift date nscalendar

我正在尝试使用Swift获取给定日历周和年份的一周中第一天的日期。

let calendar = Calendar(identifier: .gregorian)
var dayComponent = DateComponents()
dayComponent.weekOfYear = 7
dayComponent.weekday = 1
dayComponent.year = 2016
var date = calendar.date(from: dayComponent as DateComponents)

第一个问题是工作日= 1将提供星期日,而不是ISO 8601(星期一),因此我认为NSCalendar与ISO 8601不兼容。没问题,我可以使用平日= 2。

第二个问题是,上面的代码将给出2016年2月7日,而不是2016年2月15日。这里的问题是,ISO 8601将第一周定义为第一周四的一周,NSCalendar也未使用。

所以问题是,有没有办法使一周中的第一天ISO 8601迅速兼容?

我发现的所有示例均未得出与ISO兼容的日期。 谢谢!

1 个答案:

答案 0 :(得分:1)

使用ISO8601日期组件时,请使用ISO8601日历。

以下代码为您提供2016年2月15日:

let calendar = Calendar(identifier: .iso8601)
let dayComponent = DateComponents(year: 2016, weekday: 2, weekOfYear: 7)
let date = calendar.date(from: dayComponent)