Swift Calendar类返回错误的工作日日期

时间:2017-10-23 13:02:07

标签: swift cocoa

我对Swift 3中的Calendar类有疑问:

基本上,我想获得下周日的日期。但是,以下代码给出了错误的输出:

let cal = Calendar.current //gregorian
let today = Date(timeIntervalSinceNow: 0)
let date_c = DateComponents(calendar: cal, weekday: 1)

let today_weekday = cal.component(Calendar.Component.weekday, from: today)
let next_sunday = cal.nextDate(after: today, matching: date_c, matchingPolicy: Calendar.MatchingPolicy.nextTime)!

print(today_weekday) //prints out: 1 (today is Sunday, that's true)
print(next_sunday) //prints out: 2017-10-28 which is a Saturday

请注意我昨天测试了代码,这就是为什么我写的"今天是星期天"。 我期待第二次打印输出是2017-10-29(下周日)但是,它给了我星期六。我做错了什么?

1 个答案:

答案 0 :(得分:3)

日期始终打印,就像它们处于GMT时区一样。

假设您的时区是UTC + 1,那么下一个星期日将是您所在时区的29-10-2017 00:00:00。但是,此Date实例在GMT中表示为28-10-2017 23:00:00

所以nextDate确实会返回正确的日期,但是您的时区没有格式化。要解决此问题,只需使用DateFormatter

let formatter = DateFormatter()
formatter.dateStyle = .short
print(formatter.string(from: next_sunday))