如何在两个 NSDateComponents 之间获取 NSDateComponents?

Posted

技术标签:

【中文标题】如何在两个 NSDateComponents 之间获取 NSDateComponents?【英文标题】:How to get NSDateComponents between two NSDateComponents? 【发布时间】:2014-01-18 14:00:06 【问题描述】:

我有两个NSDateComponents,我想要这两个之间的所有NSDateComponents,我尝试了以下方法,

NSDateComponents *first = ...;
NSDateComponents *second = ...;

BOOL boolDone = NO;
while (!boolDone) 
    [array addObject:first];
    first.day+=1;
    NSLog(@"%@",first);

    if([[first date] compare:[second date]] == NSOrderedSame)
    
        boolDone = YES;
    


NSLog(@"All dates : %@",array);

循环之后,它只打印我在 first NSDateComponent...的日期!怎么了?

这里有一个日志可以理解

2014-01-18 19:47:16.413 testCalendar[4274:a0b]

Calendar Year: 2014
Month: 1
Leap month: no
Day: 19

2014-01-18 19:47:16.415 testCalendar[4274:a0b]

Calendar Year: 2014
Month: 1
Leap month: no
Day: 20

2014-01-18 19:47:16.416 testCalendar[4274:a0b]

Calendar Year: 2014
Month: 1
Leap month: no
Day: 21

2014-01-18 19:47:16.416 testCalendar[4274:a0b]

Calendar Year: 2014
Month: 1
Leap month: no
Day: 22

2014-01-18 19:47:16.417 testCalendar[4274:a0b]

Calendar Year: 2014
Month: 1
Leap month: no
Day: 23

2014-01-18 19:47:16.418 testCalendar[4274:a0b]

23-1-2014

23-1-2014

23-1-2014

23-1-2014

23-1-2014

【问题讨论】:

【参考方案1】:

您总是将相同的元素添加到数组中。该数组只是将 pointers 指向它的 元素,因此在循环结束时,它包含 n 个指向相同元素的指针 对象first。改变

[array addObject:first];

[array addObject:[first copy]];

应该能解决问题。

【讨论】:

以上是关于如何在两个 NSDateComponents 之间获取 NSDateComponents?的主要内容,如果未能解决你的问题,请参考以下文章

NSDateFormatter 和 NSDateComponents 的输出 NSDate 之间的区别

2 NSDateComponents - 是同一周吗?

如何在 Swift 中将 NSDateComponents 转换为 DateComponents

计算并显示两个 NSDate 之间的时间

NSDateComponents:如何将已弃用的 NSWeekCalendarUnit 替换为计算周开始日期?

NSDate 转换 NSDateComponents 问题