我有一个时间戳(NSDate),我想验证是否在同一日历周,月,年,日等发生了另一个时间戳。
我尝试通过定义2个其他NSDate来做到这一点,一个作为开始日期,一个作为结束日期。 然后用这两个日期表示所需的时间跨度。
定义当天开始的示例:
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小时。
如何在此计算中考虑夏季/冬季时间,或者是否有更好的方法来表示时间戳位于时间戳的时间跨度的具体时间跨度?
答案 0 :(得分: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
}