Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 生成连续的日期序列_Objective C_Nsdate - Fatal编程技术网

Objective c 生成连续的日期序列

Objective c 生成连续的日期序列,objective-c,nsdate,Objective C,Nsdate,给定一些起始日期,我想退化这个起始日期之后连续的x个天数。我正在尝试使用以下代码: // Generate dates self.days = [[NSMutableArray alloc] init]; NSDate *startDate = [NSDate date]; NSCalendar *theCalendar = [NSCalendar currentCalendar]; NSDateComponents *dayComponent = [[NSDateComponents all

给定一些起始日期,我想退化这个起始日期之后连续的x个天数。我正在尝试使用以下代码:

// Generate dates
self.days = [[NSMutableArray alloc] init];
NSDate *startDate = [NSDate date];

NSCalendar *theCalendar = [NSCalendar currentCalendar];
NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
dayComponent.day = 1;

for (int i = 1; i < self.mygoal.goalDays; i++) {
    [self.days addObject:startDate];
    startDate = [theCalendar dateByAddingComponents:dayComponent toDate:startDate options:0];
}
//生成日期
self.days=[[NSMutableArray alloc]init];
NSDate*开始日期=[NSDate日期];
NSCalendar*日历=[NSCalendar当前日历];
NSDateComponents*dayComponent=[[NSDateComponents alloc]init];
dayComponent.day=1;
for(int i=1;i

问题:重新分配startDate可以吗,因为我在self.days中添加了相同的对象?

这很好,因为您实际上没有添加相同的对象dateByAddingComponents:返回一个新对象,因此当您将其指定给startDate时,可以将对旧对象的引用替换为对新对象的引用dateByAddingComponents:返回一个新对象,因此当您将其指定给startDate时,可以将对旧对象的引用替换为对新对象的引用dateByAddingComponents:返回一个新对象,因此当您将其指定给startDate时,可以将对旧对象的引用替换为对新对象的引用dateByAddingComponents:返回一个新对象,因此当您将其指定给startDate时,您将旧对象的引用替换为新对象的引用

创建日期序列并不像听起来那么简单。实际上,它包含在伟大的《执行日历计算》中

您每天都要在每个循环中添加到最后一个日期。但实际上,如果时间是在切换当天更改的小时内,那么在有DST的时区中,这将失败,因为日期将为零

如果改为更改循环中的日期组件,并将其添加到原始的satrtdate,则只会影响DST切换的日期

为了处理这个问题,您可以将开始日期的时间设置为安全的时间(如中午),因为所有开关都在夜间执行

考虑到所有这些,我将使用类似的方法创建一系列日期,并将时间设置为一天的开始:

NSUInteger numberOfDays = 10;
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *startDate = [cal dateFromComponents:({
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    comps.year = 2015;
    comps.month = 1;
    comps.day = 2;
    comps.hour = 12; // for DST-safety
    comps;
})];


NSMutableArray *dates = [@[] mutableCopy];

for (NSUInteger i =0 ; i < numberOfDays; ++i) {
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    comps.day = i;
    NSDate *date = [cal dateByAddingComponents:comps
                                        toDate:startDate
                                       options:0];

    // set date to beginning of day
    [cal rangeOfUnit:NSCalendarUnitDay
           startDate:&date
            interval:NULL
             forDate:date];

    [dates addObject:date];
}
nsu整数numberOfDays=10;
NSCalendar*cal=[NSCalendar当前日历];
NSDate*startDate=[cal dateFromComponents:({
NSDateComponents*comps=[[NSDateComponents alloc]init];
公司年度=2015年;
比较月份=1;
综合日=2;
comps.hour=12;//用于DST安全
comps;
})];
NSMutableArray*日期=[@[]mutableCopy];
对于(i=0;i

因此,是的,重新分配在技术上是可以的,但在这种特殊情况下,它可能会导致意外的麻烦。

创建一个日期序列并不像听起来那么简单。实际上,它包含在伟大的《执行日历计算》中

您每天都要在每个循环中添加到最后一个日期。但实际上,如果时间是在切换当天更改的小时内,那么在有DST的时区中,这将失败,因为日期将为零

如果改为更改循环中的日期组件,并将其添加到原始的satrtdate,则只会影响DST切换的日期

为了处理这个问题,您可以将开始日期的时间设置为安全的时间(如中午),因为所有开关都在夜间执行

考虑到所有这些,我将使用类似的方法创建一系列日期,并将时间设置为一天的开始:

NSUInteger numberOfDays = 10;
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *startDate = [cal dateFromComponents:({
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    comps.year = 2015;
    comps.month = 1;
    comps.day = 2;
    comps.hour = 12; // for DST-safety
    comps;
})];


NSMutableArray *dates = [@[] mutableCopy];

for (NSUInteger i =0 ; i < numberOfDays; ++i) {
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    comps.day = i;
    NSDate *date = [cal dateByAddingComponents:comps
                                        toDate:startDate
                                       options:0];

    // set date to beginning of day
    [cal rangeOfUnit:NSCalendarUnitDay
           startDate:&date
            interval:NULL
             forDate:date];

    [dates addObject:date];
}
nsu整数numberOfDays=10;
NSCalendar*cal=[NSCalendar当前日历];
NSDate*startDate=[cal dateFromComponents:({
NSDateComponents*comps=[[NSDateComponents alloc]init];
公司年度=2015年;
比较月份=1;
综合日=2;
comps.hour=12;//用于DST安全
comps;
})];
NSMutableArray*日期=[@[]mutableCopy];
对于(i=0;i

因此,是的,重新分配在技术上是可以的,但在这种特殊情况下,它可能会导致意外的麻烦。

创建一个日期序列并不像听起来那么简单。实际上,它包含在伟大的《执行日历计算》中

您每天都要在每个循环中添加到最后一个日期。但实际上,如果时间是在切换当天更改的小时内,那么在有DST的时区中,这将失败,因为日期将为零

如果改为更改循环中的日期组件,并将其添加到原始的satrtdate,则只会影响DST切换的日期

为了处理这个问题,您可以将开始日期的时间设置为安全的时间(如中午),因为所有开关都在夜间执行

考虑到所有这些,我将使用类似这样的方法创建一个时间设置为开始的天数序列