gpt4 book ai didi

cocoa - 如何获得该月下周第一天的 NSDate

转载 作者:行者123 更新时间:2023-12-03 16:50:07 25 4
gpt4 key购买 nike

给定一个任意日期,我需要找到该月下一周的第一天的日期。请注意,这并不像在当前日期上添加 7 天那么简单,因为该月的最后一周可能少于 7 天。这是我现在使用的代码:

    NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSWeekOfMonthCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSDayCalendarUnit fromDate:currentDate];

NSLog(@"week of month: %ld", [components weekOfMonth]);

[components setWeekOfMonth:[components weekOfMonth] + 1];
NSLog(@"new week of month: %ld", [components weekOfMonth]); //week of month is now 2

[components setWeekday:1];
NSDate *nextWeek = [calendar dateFromComponents:components];

例如,currentDate 设置为 2012-10-01。在此示例中,nextWeek 始终为 2012-10-01。发送 setWeekOfMonth: 似乎不会增加 NSDateComponents 对象中的其他日期组件。我是否配置了错误的日期组件,或者 setWeekOfMonth: 不应该这样工作?

最佳答案

那么......让我们从 NSDateNSCalendar 开始:

NSDate *date = ...;
NSCalendar *cal = [NSCalendar currentCalendar];

找出该日期是一周中的哪一天:

NSInteger weekdayOfDate = [cal ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:date];
NSInteger numberOfDaysToStartOfCurrentWeek = weekdayOfDate - 1;

让我们将该日期移至下周:

NSDateComponents *oneWeek = [[NSDateComponents alloc] init];
[oneWeek setWeek:1]; // add one week
[oneWeek setDay:-numberOfDaysToStartOfCurrentWeek]; // ... and subtract a couple of days to get the first day of the week
NSDate *startOfNextWeek = [cal dateByAddingComponents:oneWeek toDate:date options:0];

此时,您的日期指向下周的第一天。现在我们应该验证它是否仍在同一个月:

NSDateComponents *monthOfNextWeek = [cal components:NSMonthCalendarUnit fromDate:startOfNextWeek];
NSDateComponents *monthOfThisWeek = [cal components:NSMonthCalendarUnit fromDate:date];
if ([monthOfNextWeek month] != [monthOfThisWeek month]) {
// the first day of the next week is not in the same month as the start date
}

当我运行此命令时,我得到下周的开始时间是 2012 年 12 月 30 日(周日,因为我的日历周从周日开始)。

但是,如果我希望一周的第一天从星期一开始,我可以在这段代码前面加上:

[cal setFirstWeekday:2]; // the first day of the week is the second day (ie, Monday, because Sunday = 1)

如果我这样做,startOfNextWeek 的结果将是 2012 年 12 月 31 日。

关于cocoa - 如何获得该月下周第一天的 NSDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14050511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com