【问题标题】:NSCalendar dateFromComponents: gives unexpected resultsNSCalendar dateFromComponents:给出了意想不到的结果
【发布时间】:2015-04-10 04:38:34
【问题描述】:

我正在尝试编写一个方法,该方法将NSDate 作为输入并返回该日期所在一周的第一天。我一直在使用NSDateComponents 来尝试设置年份、星期几年和星期几;但我得到了意想不到的行为。例如:

NSDateComponents* comps = [[NSDateComponents alloc]init];
[comps setYear:2015];
[comps setWeekday:1];
[comps setWeekOfYear:1];
NSLog(@"%@\n%@\n\n", comps, [formatter stringFromDate:[calendar dateFromComponents:comps]]);

结果:

<NSDateComponents: 0x7fbc24cc9870>
Calendar Year: 2015
Week of Year: 1
Weekday: 1
Dec 27 2016

抛开所有的奇怪,这是我的方法,它应该从NSDate 返回一周的第一天:

- (NSDate *)dateAtBeginningOfDayForDate:(NSDate *)inputDate
{
    // Use the user's current calendar and time zone
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
    [calendar setTimeZone:timeZone];
    NSDateComponents *dateComps = [calendar components:NSCalendarUnitYear | NSCalendarUnitWeekOfYear | NSCalendarUnitWeekday fromDate:inputDate];
    NSDateComponents* startOfWeek = [[NSDateComponents alloc]init];
    // Set the time components manually
    [startOfWeek setWeekOfYear:dateComps.weekOfYear];
    [startOfWeek setYear:dateComps.year];
    [startOfWeek setWeekday:0];
    // Convert to date
    NSDate *beginningOfDay = [calendar dateFromComponents:startOfWeek];
    return beginningOfDay;
}

【问题讨论】:

    标签: ios objective-c nsdate nsdateformatter nscalendar


    【解决方案1】:

    按照这个 Ry 的 Objective-C 教程...

    http://rypress.com/tutorials/objective-c/data-types/dates

    【讨论】:

      猜你喜欢
      • 2019-05-19
      • 2017-01-05
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 2021-04-22
      • 2016-02-13
      • 2017-11-05
      相关资源
      最近更新 更多