Существует ли лучший способ найти полночь завтра?

Итак, я получил результат своего исследования. Сбой был вызван textView contentInset. Когда левая и правая вставки равны 0, это хорошо работает с большими текстами, и я предполагаю, что вычисление выравниваний, шрифтов и т. Д. TextView занимает довольно много времени, поэтому компилятор просто выдал ошибку.

12
задан Dre 8 October 2008 в 05:26
поделиться

5 ответов

Из документации:

Использованию NSCalendarDate сильно препятствуют. Это еще не удерживается от использования, однако это может быть в следующей главной версии ОС после Mac OS X v10.5. Для calendrical вычислений необходимо использовать подходящие комбинации NSCalendar, NSDate и NSDateComponents, как описано в Календарях в Датах и времени, Программируя Темы для Какао.

Следование тому совету:

NSDate *today = [NSDate date];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *components = [[NSDateComponents alloc] init];
components.day = 1;
NSDate *tomorrow = [gregorian dateByAddingComponents:components toDate:today options:0];
[components release];

NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit;
components = [gregorian components:unitFlags fromDate:tomorrow];
components.hour = 0;
components.minute = 0;

NSDate *tomorrowMidnight = [gregorian dateFromComponents:components];

[gregorian release];
[components release];

(Я не уверен пренебрежительный, если это - наиболее эффективное внедрение, но оно должно служить указателем в правильном направлении.)

Примечание: В теории можно уменьшить объем кода здесь путем разрешения объекта компонентов даты со значениями, больше, чем диапазон нормальных значений для компонента (например, просто добавляя 1 к дневному компоненту, который мог бы привести к тому, что это имело значение 32). Однако, хотя dateFromComponents: может терпеть за пределы значения, этому не гарантируют. Вы сильно поощряетесь не полагаться на него.

25
ответ дан 2 December 2019 в 04:03
поделиться

Преобразуйте свою текущую дату и время на дату Unix (секунды с 1970) или стиль DOS (с 1980), затем добавьте 24 часа и преобразуйте его назад. Затем сбросьте часы, минуты и секунды для обнуления для получения до полуночи.

0
ответ дан 2 December 2019 в 04:03
поделиться

Нет - это будет тот же способ, которым Вы используете для нахождения полуночи сегодня.

7
ответ дан 2 December 2019 в 04:03
поделиться
[NSDate dateWithNaturalLanguageString:@"midnight tomorrow"];
1
ответ дан 2 December 2019 в 04:03
поделиться
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];

NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:(24 * 60 * 60)];

NSDateComponents *components = [gregorian components:(NSYearCalendarUnit |
                                                      NSMonthCalendarUnit |
                                                      NSDayCalendarUnit)
                                            fromDate:tomorrow];

NSDate *midnight = [gregorian dateFromComponents:components];
4
ответ дан 2 December 2019 в 04:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: