我对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(下周日)但是,它给了我星期六。我做错了什么?
答案 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))