NSDateComponents weekOfYear 返回错误的日期

Posted

技术标签:

【中文标题】NSDateComponents weekOfYear 返回错误的日期【英文标题】:NSDateComponents weekOfYear returns wrong date 【发布时间】:2015-11-17 21:31:53 【问题描述】:

所以我正在制作一个基本的周选择器,您可以在其中选择周数和年份,并从周的起点获取相应的日期。

一个基本的测试场景

let calendar = NSCalendar.currentCalendar()
let components = NSDateComponents()
components.year = 2015
components.weekOfYear = 15
print(calendar.dateFromComponents(components)!)

您可以看到,我将通缉年份设置为 2015,通缉周设置为 15,但我得到的结果是:“2014-12-31 23:00:00 +0000”

... 这真的让我挂了。无论我选择哪一周和哪一年,它总是会在 12 月关闭。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

weekOfYearyearForWeekOfYear 配合使用:

let calendar = NSCalendar.currentCalendar()
let components = NSDateComponents()

components.yearForWeekOfYear = 2015
components.weekOfYear = 15

print(calendar.dateFromComponents(components)!)
// 2015-04-05 22:00:00 +0000

Swift 3 及更高版本的更新:

let calendar = Calendar.current
var components = DateComponents()

components.yearForWeekOfYear = 2015
components.weekOfYear = 15

print(calendar.date(from: components)!)

【讨论】:

有点意思,把 weekday 设为 1 也有结果,只是觉得很有趣,应该提一下 @Knight0fDragon:有趣,这似乎也有效。但是你最好设置components.weekday = calendar.firstWeekday,因为星期天不是所有地方一周中的第一天。

以上是关于NSDateComponents weekOfYear 返回错误的日期的主要内容,如果未能解决你的问题,请参考以下文章

NSDateComponents : 查找超过 30 天

2 NSDateComponents - 是同一周吗?

NSDateComponents 返回意外结果

NSDateComponents

NSDateComponents 不返回日期

想要获取上个月的 NSDateComponents 问题