iPhone - как я могу проверить, назначена ли дата на понедельник? - PullRequest
2 голосов
/ 23 января 2011

Я пытаюсь выяснить, является ли дата понедельником.

Чтобы сделать это, я поступаю следующим образом:

#define kDateAndHourUnitsComponents NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];

// for test and debug purpose
NSDateComponents* b = [calendar components:kDateAndHourUnitsComponents fromDate:retDate];
int a=[[calendar components:kDateAndHourUnitsComponents fromDate:theDate] weekday];
// -----------

if ([[calendar components:kDateAndHourUnitsComponents fromDate:theDate] weekday] == EKMonday) DoThis....

Но это не работает ... a и bне содержит ничего полезного (равно 2147483647),

Мне также интересно, что может быть использование [calendar components:NSWeekdayCalendarUnit fromDate:retDate], что больше не полезно в этом случае ...

Я также нашел эточто подтверждает процесс: Как проверить, какой это день недели (т. е. вторник, пятница?) и сравнить два NSDates?

Что я пропустил?

1 Ответ

4 голосов
/ 23 января 2011

Вот, пожалуйста, это работает и возвращает дни через целые числа: 7 = Сб, 1 = Солнце, 2 = Пн ...

ЦЕЛЬ C

NSDate* curDate = [NSDate date];
int dayInt = [[[NSCalendar currentCalendar] components: NSWeekdayCalendarUnit fromDate: curDate] weekday];

SWIFT 4.2

Создайте дату, которую вы хотите проверить, какой день недели это

let dateComponents = DateComponents(
    year: 2019,
    month: 2 /*FEB*/,
    day: 23 /*23rd day of that month */
)

получитьтекущий календарь.

let cal = Calendar.current

теперь используйте календарь, чтобы проверить, является ли дата создания действительной датой

guard let date = cal.date(from: dateComponents ) else {
    // The date you build up wasn't a valid day on the calendar
    return
}

//Now that your date is validated, get the day of the week

let weekdayIndex = cal.component(.weekday, from: date)

YouВы заметите, что «weekdayIndex» является целым числом.Если вы хотите сделать его строкой, вы можете сделать что-то вроде этого:

if let weekdayName = DateFormatter().weekdaySymbols?[ weekdayIndex - 1] {
    print("The weekday for your date is :: \(weekdayName)")
}

Вместо создания своей собственной даты, вам, конечно, разрешено использовать let date = Date() вместополучить текущий день недели

...