【问题标题】:Getting weird date from NSCalendar.dateFromComponents从 NSCalendar.dateFromComponents 获取奇怪的日期
【发布时间】:2016-09-19 14:20:37
【问题描述】:

我试图从componentyearweekdayOfWeek 中获取日期,但我从上述函数中得到了奇怪的日期。这是我的工作:

let calendar = NSCalendar(identifier: NSCalendarIdentifierISO8601)
let components = NSDateComponents()
components.weekday = 1
components.weekOfYear = 16
components.yearForWeekOfYear = 2016
let dateKW = calendar?.dateFromComponents(components)

变量 dateKW 等于 24. April 2016。当我将 weekday 更改为 2 时,我得到 18. April 2016。为什么会这样?第一天不应该是 2016 年 4 月 17 日吗?

【问题讨论】:

    标签: swift nscalendar nsdatecomponents weekday


    【解决方案1】:

    在公历中,工作日单位的范围从1=Sunday2=Monday、...到7=Saturday。如果您所在地区的第一个工作日是星期一(例如在德国),那么第 18 个日历周 2016 年的时间范围为 4 月 18 日(星期一)至 4 月 24 日(星期日)。

    因此要求第 16 周的星期日

    components.weekday = 1
    components.weekOfYear = 16
    components.yearForWeekOfYear = 2016
    

    正确返回 2016 年 4 月 24 日。如果您需要该日期的第一天 星期然后设置

    components.weekday = calendar.firstWeekday
    

    或者根本不设置components.weekday

    【讨论】:

    • 哦,好吧,所以它更像是一个枚举,其中 1=sunday ... 7=saturday 好吧,现在我明白了,谢谢。我从另一个来源获取工作日、一年中的一周和一年的数据,我必须将它们显示为正确的日期。是的,我在德国。我现在的解决方案是在我的工作日加 1,幸运的是它似乎为我返回了正确的日期。
    猜你喜欢
    • 2017-08-21
    • 1970-01-01
    • 2018-04-23
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 2017-10-19
    相关资源
    最近更新 更多