#ios #objective-c
#iOS #objective-c
Вопрос:
Я использую приведенный ниже код для получения компонентов моего NSDate, и он возвращает следующие данные:
"<NSDateComponents: 0x282564be0> {n Calendar Year: 2020n Month: 10n Leap Month: 0n Day: 1",
"<NSDateComponents: 0x282561120> {n Calendar Year: 2020n Month: 10n Leap Month: 0n Day: 2",
"<NSDateComponents: 0x282561180> {n Calendar Year: 2020n Month: 10n Leap Month: 0n Day: 3",
"<NSDateComponents: 0x2825611a0> {n Calendar Year: 2020n Month: 10n Leap Month: 0n Day: 4",
"<NSDateComponents: 0x282564bd0> {n Calendar Year: 2020n Month: 10n Leap Month: 0n Day: 5",
"<NSDateComponents: 0x282561310> {n Calendar Year: 2020n Month: 10n Leap Month: 0n Day: 6",
"<NSDateComponents: 0x282561530> {n Calendar Year: 2020n Month: 10n Leap Month: 0n Day: 7"
Возможно ли вернуть объект ‘month’ в виде трехбуквенного месяца вместо фактического номера месяца? Например. вернуть октябрь как «Октябрь» вместо 10? Я могу поместить dateformatter в даты, возвращаемые в мой массив, но я не уверен, как я могу применить это к компонентам?
ViewController.m
NSDate *today = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSCalendar *calendar = [NSCalendar currentCalendar];
dateFormatter.dateFormat = @"ddMMM";
for (UInt16 i = 0; i < 7; i ) {
NSDate *nextDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:i toDate:today options: 0];
[_weekdates addObject:[dateFormatter stringFromDate: nextDate]];
NSDateComponents* components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:nextDate]; // Get necessary date components
[components month];
NSLog(@"%@", components);
}
Ответ №1:
[dateFormatter shortMonthSymbols]
это возвращает массив коротких месяцев, например Jan,Feb,Mar....
, используя это, вы получаете три буквы месяца.
NSLog(@"%@", [dateFormatter shortMonthSymbols][components.month-1]);
[components.month]
возвращает номер месяца от 1 до 12.
- (NSString *)getMonthFromDate:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSDateComponents* components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:date];
NSString *strMonthName = [dateFormatter shortMonthSymbols][components.month-1];
NSLog(@"%@", strMonthName);
return strMonthName;
}
Ответ №2:
Простой массив со значениями месяца и доступ к нему по номеру месяца будет работать.
months = [NSArray arrayWithObjects: @"Jan", @"Feb", nil];
[months objectAtIndex: i]=> i=0=> "Jan"
Комментарии:
1. Это на самом деле то, что я делаю в настоящее время; просто подумал, что может быть более эффективный способ вернуть компоненты, уже отформатированные как таковые :/