gpt4 book ai didi

iphone - NSDateComponents - 返回错误日期的日期方法

转载 作者:行者123 更新时间:2023-12-03 18:27:39 25 4
gpt4 key购买 nike

当我到达 2011 年 11 月 6 日时,我似乎无法弄清楚为什么这一天没有改变。我所做的只是遍历这些日子。任何帮助将不胜感激。这是我的代码:

NSCalendar* calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents* comp = [[NSDateComponents alloc] init];

[comp setDay:2];
[comp setMonth:11];
[comp setYear:2011];

NSDate* date = [calendar dateFromComponents:comp];

for (int i = 0; i < 7; i++) {
NSDate* d = [date dateByAddingTimeInterval:((3600 * 24) * i)];
NSDateComponents* dComponents = [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:d];

int day = [dComponents day];
NSLog(@"\nDate: %@\nDay: %i", [d description], day);
}

这是我的输出:
Date: 2011-11-02 06:00:00 +0000
Day: 2

Date: 2011-11-03 06:00:00 +0000
Day: 3

Date: 2011-11-04 06:00:00 +0000
Day: 4

Date: 2011-11-05 06:00:00 +0000
Day: 5

Date: 2011-11-06 06:00:00 +0000
Day: 6

Date: 2011-11-07 06:00:00 +0000
Day: 6

Date: 2011-11-08 06:00:00 +0000
Day: 7

谢谢!

最佳答案

11 月 6 日是由于节时而更改时间的一天,因此这一天实际上持续了 25 小时,而错误的结果可能来自于此(通常,由于日历不规则和行为,向日期添加时间间隔是不可靠的)许多参数:当前日历、时区、区域设置等)。

迭代几天的更正确方法(根据 wwdc11 视频 "Performing Calendar Calculations"(iTunes 链接))是在每次迭代的开始日期中添加适当数量的日期组件:

...
NSDateComponents *addComponents = [[NSDateComponents alloc] init];
for (int i = 0; i < 7; i++) {
[addComponents setDay: i];
NSDate* d = [calendar dateByAddingComponents:addComponents toDate:date options:0];
NSDateComponents* dComponents = [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:d];

int day = [dComponents day];
NSLog(@"\nDate: %@\nDay: %i", [d description], day);
}

关于iphone - NSDateComponents - 返回错误日期的日期方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6885896/

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