Objective-C Language
NSDate
Поиск…
замечания
NSDate
- очень простой тип значения, представляющий один точный момент в универсальном времени. Он не содержит информацию о часовых поясах, летнее время, календари или локаль.
NSDate
действительно является только неизменной оболочкой вокруг NSTimeInterval
которая является double
. Нет никакого изменчивого подкласса, как в некоторых других типах значений в Foundation.
Создание NSDate
Класс NSDate
предоставляет методы для создания объектов NSDate
соответствующих заданной дате и времени. NSDate
может быть инициализирован с использованием назначенного инициализатора, который:
Возвращает объект
NSDate
инициализированный относительно 00:00:00 UTC 1 января 2001 года на заданное количество секунд.
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:100.0];
NSDate
также предоставляет простой способ создания NSDate
равного текущей дате и времени:
NSDate *now = [NSDate date];
Также можно создать NSDate
определенное количество секунд с текущей даты и времени:
NSDate *tenSecondsFromNow = [NSDate dateWithTimeIntervalSinceNow:10.0];
Сравнение даты
Существует 4 метода сравнения NSDate
s в Objective-C:
-
- (BOOL)isEqualToDate:(NSDate *)anotherDate
-
- (NSDate *)earlierDate:(NSDate *)anotherDate
-
- (NSDate *)laterDate:(NSDate *)anotherDate
-
- (NSComparisonResult)compare:(NSDate *)anotherDate
Рассмотрим следующий пример, используя 2 даты, NSDate date1 = July 7, 2016
и NSDate date2 = July 2, 2016
:
NSDateComponents *comps1 = [[NSDateComponents alloc]init];
comps.year = 2016;
comps.month = 7;
comps.day = 7;
NSDateComponents *comps2 = [[NSDateComponents alloc]init];
comps.year = 2016;
comps.month = 7;
comps.day = 2;
NSDate* date1 = [calendar dateFromComponents:comps1]; //Initialized as July 7, 2016
NSDate* date2 = [calendar dateFromComponents:comps2]; //Initialized as July 2, 2016
Теперь, когда NSDate
создаются, их можно сравнить:
if ([date1 isEqualToDate:date2]) {
//Here it returns false, as both dates are not equal
}
Мы также можем использовать earlierDate:
и laterDate:
класса NSDate
:
NSDate *earlierDate = [date1 earlierDate:date2];//Returns the earlier of 2 dates. Here earlierDate will equal date2.
NSDate *laterDate = [date1 laterDate:date2];//Returns the later of 2 dates. Here laterDate will equal date1.
Наконец, мы можем использовать NSDate
compare:
NSDate
:
NSComparisonResult result = [date1 compare:date2];
if (result == NSOrderedAscending) {
//Fails
//Comes here if date1 is earlier than date2. In our case it will not come here.
}else if (result == NSOrderedSame){
//Fails
//Comes here if date1 is the same as date2. In our case it will not come here.
}else{//NSOrderedDescending
//Succeeds
//Comes here if date1 is later than date2. In our case it will come here
}
Преобразование NSDate, который состоит из часа и минуты (только) для полного NSDate
Есть много случаев, когда вы создали NSDate только с часовым и минутным форматом, то есть: 08:12
Недостатком этой ситуации является то, что ваш NSDate почти полностью «голый», и вам нужно создать: день, месяц, год, второй и часовой пояс, чтобы этот объект «играл» с другими типами NSDate.
Для примера предположим, что hourAndMinute - это тип NSDate, который состоит из часового и минутного формата:
NSDateComponents *hourAndMintuteComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute
fromDate:hourAndMinute];
NSDateComponents *componentsOfDate = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear
fromDate:[NSDate date]];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay: componentsOfDate.day];
[components setMonth: componentsOfDate.month];
[components setYear: componentsOfDate.year];
[components setHour: [hourAndMintuteComponents hour]];
[components setMinute: [hourAndMintuteComponents minute]];
[components setSecond: 0];
[calendar setTimeZone: [NSTimeZone defaultTimeZone]];
NSDate *yourFullNSDateObject = [calendar dateFromComponents:components];
Теперь ваш объект является общей противоположностью тому, чтобы быть «голым».
Преобразование NSDate в NSString
Если ww имеет объект NSDate, и мы хотим преобразовать его в NSString. Существуют разные типы строк даты. Как мы можем это сделать? Это очень просто. Всего 3 шага.
- Создать объект NSDateFormatter
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- Установите формат даты, в котором вы хотите свою строку.
dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";
Теперь получим форматированную строку
NSDate *date = [NSDate date]; // your NSDate object NSString *dateString = [dateFormatter stringFromDate:date];
Это даст результат примерно так: 2001-01-02 at 13:00
Замечания:
Создание экземпляра NSDateFormatter
- дорогостоящая операция, поэтому рекомендуется создать его один раз и повторно использовать, когда это возможно.