Получение первого и последнего дней текущей недели
-
06-07-2019 - |
Вопрос
Как я могу узнать первый и последний дни текущей недели?Что мне нужно, так это какой-то способ фильтрации набора объектов со свойством NSDate, чтобы оставить только те, которые появляются на текущей неделе, а затем отфильтровать их по дням.Также мне нужен какой-то способ получить локализованные названия дней.
Я пытался поиграть с NSCalendar, NSDate и NSDateComponents, но, похоже, я не могу просто проверить firstWeekday календаря, так как там могут быть недели с днями из предыдущего / следующего месяца.
Решение 2
Хорошо, вот он, фрагмент кода Python, который делает эту работу
def daySec(diff):
return 60*60*24*diff
def weekDays(dt=None):
if not dt:
dt = NSDate.date() # use today
cal = NSCalendar.currentCalendar()
dc = cal.components_fromDate_(NSWeekdayCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit, dt)
normDt = cal.dateFromComponents_(dc) # get the day-rounded date
shift = dc.weekday() - cal.firstWeekday()
firstDt = normDt.dateByAddingTimeInterval_(daySec(-shift))
lastDt = normDt.dateByAddingTimeInterval_(daySec(-shift+7)) # up to next week's first day midnight
return (firstDt, lastDt)
Другие советы
Используйте NSDateComponents, чтобы получить день недели, который равен от 1 для воскресенья до 7.
Получив номер дня недели, рассчитайте разницу между ним и вашим первым днем недели.Например, если вы считаете понедельник (2) первым днем, то на сколько дней раньше это было (или будет)?Если будний день равен 4 (ср), то разница равна 2.Это означает, что если вы вычтете два дня из исходной даты, то получите первый день недели, на который она приходится.
Проверьте документация для получения подробной информации, потому что вам нужно будет иметь дело с тем фактом, что эти объекты также включают атрибуты времени.Если вы можете, убедитесь, что значения времени всегда равны нулю, когда вас интересуют только даты и сравнения дат.