gpt4 book ai didi

iphone - NSDateComponents 这一年最后一周的周组件

转载 作者:可可西里 更新时间:2023-11-01 04:53:48 25 4
gpt4 key购买 nike

一年有多少周?因为我在网上搜索过,我发现一年总共有 52.1 周,但是如果我在 Xcode 中这样做:

NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];

[gregorian setFirstWeekday:2];

NSDate* sourceDate = [NSDate date];

NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

NSDate* today = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];

NSDateComponents *todaysComponents = [gregorian components:NSWeekCalendarUnit fromDate:today];

NSUInteger todaysWeek = [todaysComponents week];

tod​​aysWeek 的值为:53,这怎么可能?为什么不是 52?

最佳答案

他们将 52.1 转换为 53...与其截断小数部分,不如显示更多。

它还取决于一周的开始日期。

欧洲和 ISO 标准(周一至周日)--52 个完整周,短(1 天)周占 1 月 1 日星期日,短(1 天)周占 12 月 31 日星期一,总共 54 周。

美国标准(周日至周六)--52 个完整的星期,以及一个短的(2 天)星期,占 12 月 30 日和 31 日,总共 53 个星期。

从周六到周五——51 个完整周,一个短周(6 天)从 1 月 1 日到 1 月 6 日,一个短周(3 天)从 12 月 29 日到 12 月 31 日,总共 53 周。

编辑:

由于 iOS NSCalender dosent 似乎是根据 ISO 8601 作为默认定义的。您需要使用方法“setMinimumDaysInFirstWeek”设置您的日历以获得预期的周数结果。

请添加此代码并检查

    [gregorian setMinimumDaysInFirstWeek:5]; //"5" means Thursday in this case.

http://en.wikipedia.org/wiki/ISO_week_date “一年的第一周是包含该年第一个星期四的那一周。”

编辑 2:

用于检查一年中可能的最小/最大周数

NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
int minWeeks, maxWeek;
minWeeks=maxWeek=0;
for (int weekCounter=1; weekCounter<=7; weekCounter++) {
[gregorian setMinimumDaysInFirstWeek:weekCounter];
[gregorian setFirstWeekday:2];
NSDate* sourceDate = [NSDate date];
NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];
NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;
NSDate* today = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];
NSDateComponents *todaysComponents = [gregorian components:NSWeekCalendarUnit fromDate:today];
NSUInteger todaysWeek = [todaysComponents week];

if (todaysWeek>maxWeek) {
maxWeek=todaysWeek;
}
if (todaysWeek<minWeeks || minWeeks==0) {
minWeeks=todaysWeek;
}
}
NSLog(@"min:%d, max:%d", minWeeks, maxWeek);

关于iphone - NSDateComponents 这一年最后一周的周组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14019126/

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