SInt32 CFAbsoluteTimeGetDayOfWeek(CFAbsoluteTime at, CFTimeZoneRef tz);得到当前时间是星期几
SInt32 CFAbsoluteTimeGetDayOfYear(CFAbsoluteTime at, CFTimeZoneRef tz);得到当前是这一年中的第多少天
SInt32 CFAbsoluteTimeGetWeekOfYear(CFAbsoluteTime at, CFTimeZoneRef tz);得到当前是这一年中的第多少周
1:CFAbsoluteTime now = CFAbsoluteTimeGetCurrent ();
这个返回的是CFTimeInterval类型,这个是timeInterval是针对于2001-01-01 00:00:00 GMT的时间。正值表示在参考时间之后,负值表示在参考值之后,看到的数据基本形式是3.60125e+0.8这种形式。但是在debug中在弹出的选择show Formatted summaries,可以看到时间为@"5/31/2012 10:49:58.791747".
2:计算两个时间间隔
CFTimeZoneRef timeZone = CFTimeZoneCopySystem();
CFGregorianUnits startUnits = {-11, -5, 1, 0, 0, 0};
CFAbsoluteTime nowAdd=CFAbsoluteTimeAddGregorianUnits(now, timeZone, startUnits);
CFGregorianUnits units = CFAbsoluteTimeGetDifferenceAsGregorianUnits
(now, nowAdd, NULL, (kCFGregorianUnitsHours | kCFGregorianUnitsMinutes));
CFStringRef output = CFStringCreateWithFormat(NULL, 0, CFSTR("hours: %d; minutes: %d"), units.hours, units.minutes);
CFShow(output);
代码第一句:系统当前时区
代码第二句:是一个结构体,表示和任何一个时间的间隔
struct CFGregorianUnits {
SInt32 years;
SInt32 months;
SInt32 days;
SInt32 hours;
SInt32 minutes;
double seconds;
};
typedef struct CFGregorianUnits CFGregorianUnits;
第四句:表示两个时间的间隔用CFGreorianUnits形式表示出来。
3:NSInteger weekofday=CFAbsoluteTimeGetDayOfWeek(now, CFTimeZoneCopySystem());
NSLog(@"day:%d",weekofday);
表示这个时间是一个星期中的第几天
4:NSInteger yearOfDay=CFAbsoluteTimeGetDayOfYear(now, CFTimeZoneCopySystem());
表示这个时间是一年中的第几天
5:CFGregorianDate gregorianStartDate = CFAbsoluteTimeGetGregorianDate(
now,
timeZone);
把CFAbsoluteTime转化成CFGregorianDate
struct CFGregorianDate {
SInt32 year;
SInt8 month;
SInt8 day;
SInt8 hour;
SInt8 minute;
double second;
};
typedef struct CFGregorianDate CFGregorianDate;
6:CFAbsoluteTime nowAbsolute=CFGregorianDateGetAbsoluteTime(gregorianStartDate, timeZone);
把CFGregorianDate转化成CFAbsoluteTime
7:BOOL bResult=CFGregorianDateIsValid(gregorianStartDate, kCFGregorianAllUnits);
Boolean CFGregorianDateIsValid (
CFGregorianDate gdate,
CFOptionFlags unitFlags
);
enum CFGregorianUnitFlags {
kCFGregorianUnitsYears = (1 << 0),
kCFGregorianUnitsMonths = (1 << 1),
kCFGregorianUnitsDays = (1 << 2),
kCFGregorianUnitsHours = (1 << 3),
kCFGregorianUnitsMinutes = (1 << 4),
kCFGregorianUnitsSeconds = (1 << 5),
kCFGregorianAllUnits = 0x00FFFFFF
};
typedef enum CFGregorianUnitFlags CFGregorianUnitFlags;
这个函数用于检测CFGregorianDate有没有不符合的,象month只有12个月,days最多只有31天等等。