gpt4 book ai didi

cocoa - 计算一年中第一周的日期会改变月份

转载 作者:行者123 更新时间:2023-12-03 17:02:06 27 4
gpt4 key购买 nike

我需要从任意日期获取一周第一天的日期。这段代码工作正常,但对于某些日期我得到一个非常奇怪的结果。一年第一周的日期转换为上周的日期:

NSTimeInterval ti = 1420311299;
NSDate* date = [NSDate dateWithTimeIntervalSince1970:ti];

NSLog(@"%@", date); // OUTPUT: 2015-01-03 18:54:59 +0000

NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents *cmps = [calendar components:(kCFCalendarUnitWeekOfYear | kCFCalendarUnitYear) fromDate:date];

cmps.weekday = calendar.firstWeekday;

NSLog(@"%@", cmps); // OUTPUT: Calendar Year: 2015
// Week of Year: 1
// Weekday: 1



NSDate* newDate = [calendar dateFromComponents:cmps];

NSLog(@"%@", newDate); // OUTPUT: 2015-12-26 22:00:00 +0000

最佳答案

NSCalendar 类提供了专用方法来执行如下计算:

NSDate *date =...;
NSDate *startOfTheWeek;
NSTimeInterval interval;
[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitWeekOfMonth
startDate:&startOfTheWeek
interval:&interval
forDate:date];

interval 包含一周的长度。如果不需要,可以传入NULL

NSDate *date =...;
NSDate *startOfTheWeek;
[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitWeekOfMonth
startDate:&startOfTheWeek
interval:NULL
forDate:date];
<小时/>

回答您原来的问题:周的开始和结束与年不一致。 1 月 1 日、2 日和 3 日可能位于上一年的第 53 周。 12月29日、30日、31日可能是下一年的第一周。规则是:如果本周的星期四是 12 月,则该周属于旧的一年。如果是一月份,则该周是新年的第一周。

<小时/>

每个 Mac/iOS 开发者都应该观看:WWDC 2011 视频 "Session 117 - Performing Calendar Calculations"

关于cocoa - 计算一年中第一周的日期会改变月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31479603/

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