我遇到了一个相当奇怪的“虫子”。使用此方法获取一年中一周的日期时:
let dates = NSMutableArray()
let cal = NSCalendar.currentCalendar()
cal.firstWeekday = 2
let formatter = NSDateFormatter()
formatter.dateFormat = "ww YYYY"
formatter.calendar = cal
let date = formatter.dateFromString(week as String)
println(date)
字符串week
为52 2014
,因此预计日期为12月22日星期一,而是返回12月20日星期六23:00。首先,我以为我通过设置日历的firstWeekday
选项来处理一周的第一天,但没有运气。此外,返回的日期甚至不在第52周。
只是为了仔细检查我跑cal.components(NSCalendarUnit.WeekOfYearCalendarUnit, fromDate: date!).weekOfYear
以仔细检查我不是白痴,而且没有先生,所产生日期的一周是51,即所需周的前一周。
知道如何达到预期效果吗?
答案 0 :(得分:1)
知道如何达到预期效果吗?
实际上你想要的结果是什么?您想知道一周的第一天还是最后一天的第一天?你可以托盘:
let now = NSDate()
var startDate: NSDate? = nil
var duration: NSTimeInterval = 0
let cal = NSCalendar.currentCalendar()
cal.firstWeekday = 2
cal.rangeOfUnit(.WeekCalendarUnit, startDate: &startDate, interval: &duration, forDate: now);
let endDate = startDate?.dateByAddingTimeInterval(duration)
print(startDate)
print(endDate)
打印
"Optional(2014-12-21 23:00:00 +0000)"
"Optional(2014-12-28 23:00:00 +0000)"
endDate是第一个不在本周的秒。
请注意,1小时的偏移是因为它以UTC时间打印,实际上是GMT冬季时间。实际上,我的时区(GMT + 1)中的这些日期为2014-12-22 00:00:00
和2014-12-29 00:00:00
或只是
let components = NSDateComponents()
components.weekOfYear = 52
components.weekday = 2
components.year = 2014
let cal = NSCalendar.currentCalendar()
let day = cal.dateFromComponents(components)
此代码适合尊重用户的日历:
let cal = NSCalendar.currentCalendar()
let components = NSDateComponents()
components.weekOfYear = 52
components.weekday = cal.firstWeekday
components.year = 2014
答案 1 :(得分:0)
将firstWeekday从1更改为2将不会更改日期,它将从星期日到星期一更改第一个工作日。
你可以这样做:
func dateFromWeekOfYear(year:Int, weekOfYear:Int, weekday:Int) -> NSDate {
return NSCalendar.currentCalendar().dateWithEra(1, yearForWeekOfYear: year, weekOfYear: weekOfYear, weekday: weekday, hour: 0, minute: 0, second: 0, nanosecond: 0)!
}
let date1 = dateFromWeekOfYear(2014, 52, 1) // Dec 21, 2014, 12:00 AM
let date2 = dateFromWeekOfYear(2014, 52, 2) // Dec 22, 2014, 12:00 AM
let date3 = dateFromWeekOfYear(2014, 52, 3) // Dec 23, 2014, 12:00 AM
如果处理一个字符串并且你想在一周中的某一天设置他独立,你就可以这样做:
let myDate = "2 52 2014"
let cal = NSCalendar.currentCalendar()
let formatter = NSDateFormatter()
formatter.dateFormat = "c ww Y"
formatter.calendar = cal
if let date1 = formatter.dateFromString(myDate) {
date1 // "Dec 22, 2014, 12:00 AM"
}
如果您需要进一步参考,可以使用: