【问题标题】:Creating single weekOfYear NSDate object创建单个 weekOfYear NSDate 对象
【发布时间】:2015-06-30 03:51:44
【问题描述】:

我正在用这个函数创建 NSDate 对象

-(NSDate *)createDate:(int)Year :(int)WeekOfYear{
    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setYear:Year];
    [components setWeekOfYear:WeekOfYear];
    NSDate *date = [_calendar dateFromComponents:components];
    return date;
}

当我循环插入 2015 年,然后是第 1 周到第 52 周。 它只用这个创建 52 个 NSDate 对象

2014-12-31 13:00:00 +0000

我怎样才能让它有效地创造一年中每个星期的开始?

【问题讨论】:

    标签: nsdate nsdatecomponents gregorian-calendar


    【解决方案1】:

    这对你来说可能为时已晚,但也许对其他人有用。

    因此,您不能这样做,因为 weekOfYear 是根据完全构造的 NSDateComponents 计算的,该组件是从完全构造的 NSDate 创建的。 你可以做的是这样的:

    func getFirstDaysOfWeekInYear(year: Int) -> [NSDate] {
      var arrayOfFirstDayOfWeek : [NSDate] = []
      let calendar = NSCalendar.currentCalendar()
      let firstDayOfYearComponents = NSDateComponents()
      firstDayOfYearComponents.day = 1
      firstDayOfYearComponents.month = 1
      firstDayOfYearComponents.year = year
      let firstDayOfYearDate = calendar.dateFromComponents(firstDayOfYearComponents)!
    
      // if the first day of the year is not a monday, this will give you the first day of
      // the last week of the previous year, it's up to you if you want to remove it or not
      let firstWeekOfYearDate = self.roundWeekDayToFirstWeekDay(firstDayOfYearDate)
    
      arrayOfFirstDayOfWeek.append(firstWeekOfYearDate)
      for i in 1 ... 52 {
        let componentsToAdd = NSDateComponents()
        componentsToAdd.weekOfYear = i
        arrayOfFirstDayOfWeek.append(calendar.dateByAddingComponents(componentsToAdd, toDate: firstWeekOfYearDate, options: [])!)
      }
      return arrayOfFirstDayOfWeek
    }
    
    func roundWeekDayToFirstWeekDay(date: NSDate) -> NSDate {
      let calendar = NSCalendar.currentCalendar()
      let dateComponents : NSDateComponents = calendar
        .components([NSCalendarUnit.Year, NSCalendarUnit.Month, NSCalendarUnit.Day],
          fromDate: date)
      let keyDateComponents = NSDateComponents()
      let dayOfWeek = Int(date.stringFromDate(format: "e"))!
      let differenceToMonday = (dayOfWeek == 1 ? 6 : dayOfWeek - 2)
      keyDateComponents.day = dateComponents.day - differenceToMonday
      keyDateComponents.month = dateComponents.month
      keyDateComponents.year = dateComponents.year
      return calendar.dateFromComponents(keyDateComponents)!
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多