Вопрос

Как я могу узнать первый и последний дни текущей недели?Что мне нужно, так это какой-то способ фильтрации набора объектов со свойством 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.Это означает, что если вы вычтете два дня из исходной даты, то получите первый день недели, на который она приходится.

Проверьте документация для получения подробной информации, потому что вам нужно будет иметь дело с тем фактом, что эти объекты также включают атрибуты времени.Если вы можете, убедитесь, что значения времени всегда равны нулю, когда вас интересуют только даты и сравнения дат.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top