0

我有一个时间戳 (NSDate),我想验证另一个时间戳是否发生在同一日历周、月、年、日等。

我试图通过定义其他 2 个 NSDates 来做到这一点,一个作为开始日期,一个作为结束日期。然后用这两个日期表示所需的时间跨度。

定义当天开始的示例:

NSDate *myDate = [[NSDate alloc] init];
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:(
                                                NSEraCalendarUnit |
                                                NSMonthCalendarUnit |
                                                NSYearCalendarUnit |
                                                NSDayCalendarUnit |
                                                NSHourCalendarUnit |
                                                NSMinuteCalendarUnit |
                                                NSSecondCalendarUnit |
                                                NSTimeZoneCalendarUnit
                                                ) fromDate:myDate];

[components setHour:1];
[components setMinute:0];
[components setSecond:0];
startDate = [cal dateFromComponents:components];

这应该将 startDate 设置为当前日期的时间 ​​00:00:00。问题是这仅在 myDate 具有当前时区时才有效。例如,如果我们现在有冬季时间,而 NSDate 是夏季时间,它会将时间设置为错误的 1 小时。

我如何在此计算中考虑夏季/冬季时间,或者是否有更好的方法来表示时间戳所在的基于日历的时间跨度的具体时间跨度?

4

1 回答 1

2

获取给定日期的一天/周/月/...时间跨度的最简单方法是 rangeOfUnit方法。例如:

NSDate *date1, *date2;

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *startOfTimespan;
NSTimeInterval lengthOfTimespan;
[calendar rangeOfUnit:NSWeekOfYearCalendarUnit
        startDate:&startOfTimespan
         interval:&lengthOfTimespan
          forDate:date1];

现在startOfTimespan是包含 的一周的开始date1,并且lengthOfTimespan是该周的长度。所以你可以date2

NSTimeInterval diff = [date2 timeIntervalSinceDate:startOfTimespan];
if ( diff >= 0 && diff < lengthOfTimespan) {
    // date1 and date2 are in the same week
}
于 2013-11-12T13:49:02.050 回答