Используя даты

Эта задача содержит примеры на создании, сравнении и преобразовании дат. Перечисление 1 показывает Вам, как получить текущее абсолютное время и преобразовать его в объект CFDate.

Перечисление 1  , Создающее объект CFDate

CFAbsoluteTime      absTime;
CFDateRef           aCFDate;
 
absTime = CFAbsoluteTimeGetCurrent();
aCFDate = CFDateCreate(kCFAllocatorDefault, absTime);

Для сравнения двух дат используйте сравнить функцию CFDateCompare как показано в Перечислении 2.

Перечисление 2  , Сравнивающее два объекта CFDate

// Standard Core Foundation comparison result.
CFComparisonResult result;
 
// Create two CFDates from absolute time.
date1 = CFDateCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent());
date2 = CFDateCreate(kCFAllocatorDefault, CFAbsoluteTimeGetCurrent());
 
// Pass NULL for the context param.
result = CFDateCompare(date1, date2, NULL);
 
switch (result) {
    case kCFCompareLessThan:
        printf("date1 is before date2!\n");
        break;
    case kCFCompareEqualTo:
        printf("date1 is the same as date2!\n");
        break;
    case kCFCompareGreaterThan:
        printf("date1 is after date2!\n");
        break;
    }

CFDateCompare функция выполняет точные сравнения, что означает, что она обнаруживает подвторые различия между датами. Вы могли бы хотеть сравнить даты с меньшим количеством мелкоячеистости. Например, Вы могли бы хотеть считать две даты равными, если они в течение одной минуты друг после друга. Это может быть выполнено путем простого преобразования CFDates в абсолютное время и сравнения двух значений с плавающей точкой с помощью фактора нечеткости. Для сравнения Грегорианских модулей как месяц или неделя можно преобразовать и CFDates в CFGregorianDate и сравнить надлежащие поля. Преобразование абсолютного времени к и с Грегорианских дат довольно просто. Перечисление 3 демонстрирует, как сделать это.

Перечисление 3  , Работающее с Грегорианскими датами

Boolean             status;
CFGregorianDate     gregDate;
CFAbsoluteTime      absTime;
 
// Construct a Gregorian date.
gregDate.year = 1999;
gregDate.month = 11;
gregDate.day = 23;
gregDate.hour = 17;
gregDate.minute = 33;
gregDate.second = 22.7;
 
// Check the validity of the date.
status = CFGregorianDateIsValid(gregDate, kCFGregorianAllUnits);
printf("Is my Gregorian date valid? %d\n", status);
 
// Convert the Gregorian date to absolute time.
absTime = CFGregorianDateGetAbsoluteTime(gregDate, NULL);
printf("The Absolute Time from a Gregorian date is: %d\n", absTime);