获取年度的第一周 NSCalendar

Getting first week of the Year NSCalendar

我正在尝试将一周的开始日期放入应用程序中。 然而在 2017 年,这会导致意外行为,因为今年有 2 次“1”周,

1 月 1 日星期日和 12 月 31 日星期日开始。 我的程序找到了后者。给我的结果 '01-01-2018' 应该在哪里,'02-01-2017'

我如何确保我的程序找到第一个可用的日期?

这是我的代码:

getFirstDay(Int(weekNummer)!, year: yearWrap)

func getFirstDay(weekNumber:Int, year:Int)->String?{
    let Calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
    let dayComponent = NSDateComponents()
    dayComponent.weekOfYear = weekNumber
    dayComponent.weekday = 2
    dayComponent.year = year
    var date = Calendar.dateFromComponents(dayComponent)
    if ((weekNumber == 1 || weekNumber == 52 || weekNumber == 53) && Calendar.components(.Month, fromDate: date!).month != 1 ){
        dayComponent.year = year - 1
        date = Calendar.dateFromComponents(dayComponent)
    }
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "dd-MM-yyyy"
    return String(dateFormatter.stringFromDate(date!))
}

让我们做NSCalendar完整的日期数学运算

func firstDayOfWeek(week: Int, inYear year : Int) -> NSString {
  let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
  let components = NSDateComponents()
  components.weekOfYear = week
  components.yearForWeekOfYear = year
  components.weekday = 2 // First weekday of the week (Sunday = 1)
  let dateFormatter = NSDateFormatter()
  dateFormatter.dateFormat = "dd-MM-yyyy"
  let date = calendar.dateFromComponents(components)!
  return dateFormatter.stringFromDate(date)
}

firstDayOfWeek(1, inYear : 2017) // 02-01-2017
firstDayOfWeek(1, inYear : 2018) // 01-01.2018