Используя даты
Эта задача содержит примеры на создании, сравнении и преобразовании дат. Перечисление 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); |