使用苹果基金会日历正确

问题描述 投票:1回答:1

我对苹果的基础框架的日历的正确用法有点迷茫。

let calendar = Calendar(identifier: .iso8601)
let dayComponent = DateComponents(year: 2019, weekday: 1, weekOfYear: 6)
let date = calendar.date(from: dayComponent)

我需要一年的某一周的第一天。当使用下列日期上面的代码依赖于平日给出:

//weekday:
//0 -> 08 FEB
//1 -> 09 FEB
//2 -> 03 FEB
//3 -> 04 FEB
//4 -> 05 FEB

为什么增加时,平日在本周(6),同时切换至5周从0开始?

谢谢你的帮助。

cocoa calendar foundation
1个回答
2
投票

一对夫妇的意见:

  1. 当通过迭代平日里,你要到7从1走,因为,“日,周,星期,月份和年份数字一般都是基于1 ...” Date and Time Programming Guide: Date Components and Calendar Units。您可以使用range(of:in:for:)maximumRange(of:)等,找到可能的值的范围。
  2. 从1到7平日值并不意味着“一周的第一天”,“一周的第二天”等,他们指的是一周的,例如特定的日子对于.iso8601,“太阳报”为1,“星期一”是2,等等。
  3. 确保当您使用weekOfYear,您使用yearForWeekOfYearlet calendar = Calendar(identifier: .iso8601) let firstOfWeek = DateComponents(calendar: calendar, weekOfYear: 6, yearForWeekOfYear: 2019).date!
  4. 您的代码是通过迭代平日。考虑这个代码,枚举所有的一周天的2019年第六周(即星期一开始,2月4日和结束日,2月10日当周): let weekdays = calendar.range(of: .weekday, in: .weekOfYear, for: firstOfWeek)! let daysOfTheWeek = Dictionary(uniqueKeysWithValues: zip(weekdays, calendar.weekdaySymbols)) for weekday in weekdays { let date = DateComponents(calendar: calendar, weekday: weekday, weekOfYear: 6, yearForWeekOfYear: 2019).date! print("The", daysOfTheWeek[weekday]!, "in the 6th week of 2019 is", formatter.string(from: date)) } 这导致: 太阳在2019年第6周是星期天,2019年2月10, 孟在2019年第6周是星期一,2019年2月4, 在星期二在2019年第6周是星期二,2019 2月5日, 在星期三在2019年第6周是星期三,2019年2月6, 在周四的2019年第6周是星期四,2019年2月7, 在周五的2019年第6周是周五,2019年2月8, 国家税务总局在2019年第6周是星期六,2019年2月9日 这实际上是你的代码做,为什么你没有看到你所期望的。
  5. 如果你想通过七天,以便在本周的循环,就得到了一周的开始,然后从那里抵消它: let calendar = Calendar(identifier: .iso8601) let startOfWeek = DateComponents(calendar: calendar, weekOfYear: 6, yearForWeekOfYear: 2019).date! for offset in 0 ..< 7 { let date = calendar.date(byAdding: .day, value: offset, to: startOfWeek)! print(offset, "->", formatter.string(from: date)) } 这导致: 0 - >周一,2019年2月4, 1 - >周二,2019年2月5, 2 - >周三,2019年2月6日 3 - >星期四,2019年2月7 4 - >周五,2019年2月8日 5 - >周六,2019年2月9日 6 - >周日,2019年2月10,
  6. 您询问: 我需要一年的某一周的第一天。 也许不用说在这一点上,只是省略了平日: let startOfWeek = DateComponents(calendar: calendar, weekOfYear: 6, yearForWeekOfYear: 2019).date!

另请参阅Date and Time Programming Guide: Week-Based Calendars

© www.soinside.com 2019 - 2024. All rights reserved.