NSDate расчеты летнее время
У меня есть отметка времени (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 час.
Как я могу учитывать летнее / зимнее время в этом расчете, или есть лучший способ представить конкретный временной интервал, на котором основан временной календарь на основе временной метки?
1 ответ
Самый простой способ получить временной интервал в день / неделю / месяц /... для данной даты - это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
}