日付の使用
このタスクには、日付の作成、比較、および変換の例が含まれています。リスト 1 は、現在の絶対時間を取得し、それを CFDate オブジェクトに変換する方法を示しています。
リスト 1 : CFDate オブジェクトの作成
CFAbsoluteTime absTime; CFDateRef aCFDate; absTime = CFAbsoluteTimeGetCurrent(); aCFDate = CFDateCreate(kCFAllocatorDefault, absTime);
2 つの日付を比較するには、リスト 2 に示すように比較関数 CFDateCompare を使用します。
リスト 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 関数は厳密な比較を実行します。つまり、日付間のサブ秒の差を検出します。あまり細かい精度で日付を比較したくないかもしれません。たとえば、2 つの日付が互いに 1 分以内であれば、2 つの日付を同じと見なすかも知れません。これは、CFDate を絶対時間に変換し、2 つの浮動小数点値をファジーな要素を使用して比較するだけで実現できます。月または週のようなグレゴリオ暦の単位を比較するには、両方の CFDate を 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);
前の章 次の章