时间运算之Calendars
Creating a Calendar
?
?
1:You create a calendar object by specifying an identifier for the calendar you want. Mac OS X provides data for several different calendars—Buddhist, Chinese, Gregorian, Hebrew, Islamic, and Japanese—specified by constants in NSLocale.
?
?
NSCalendar *japaneseCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSJapaneseCalendar];
?
?
2:You can get the calendar for the user's preferred locale (or in general from any NSLocale object) using the key NSLocaleCalendar,
?
NSCalendar *usersCalendar = [[NSCalendar alloc] initWithCalendarIdentifier: [[NSLocale currentLocale] objectForKey:NSLocaleCalendar]];
?
?
3:or most easily using the NSCalendar method currentCalendar. The following code fragment shows how to create a calendar object for the Japanese calendar, and for the current user:
?
?
NSCalendar *currentCalendar = [NSCalendar currentCalendar];
?
?
?
Calendrical Calculations
?
取得时间差
?
NSDate *startDate = ...;NSDate *endDate = ...; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; unsigned int unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit; NSDateComponents *components = [gregorian components:unitFlags fromDate:startDate toDate:endDate options:0];int months = [components month];int days = [components day];
?
?
api:
?
?
1:从NSDate 中取得NSDateComponents 对象
?
Returns a NSDateComponents object containing a given date decomposed into specified components.
- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)date
?
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;NSDate *date = [NSDate date];NSDateComponents *comps = [gregorian components:unitFlags fromDate:date];
?
?
2:取得时间差
Returns, as an NSDateComponents object using specified components, the difference between two supplied dates.
- (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
?
NSDate *startDate = ...;NSDate *endDate = ...;unsigned int unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;NSDateComponents *comps = [gregorian components:unitFlags fromDate:startDate toDate:endDate options:0];int months = [comps month];int days = [comps day];
?
3:在给定的NSDate 上增加几天,几年等。。。。
?
Returns a new NSDate object representing the absolute time calculated by adding given components to a given date.
- (NSDate *)dateByAddingComponents:(NSDateComponents *)comps toDate:(NSDate *)date options:(NSUInteger)opts
?
NSDate *currentDate = [NSDate date];NSDateComponents *comps = [[NSDateComponents alloc] init];[comps setMonth:2];[comps setDay:3];NSDate *date = [gregorian dateByAddingComponents:comps toDate:currentDate options:0];[comps release];
?
4:取得一个指定的时间
Returns a new NSDate object representing the absolute time calculated from given components.
- (NSDate *)dateFromComponents:(NSDateComponents *)comps
?
NSDateComponents *comps = [[NSDateComponents alloc] init];[comps setYear:1965];[comps setMonth:1];[comps setDay:6];[comps setHour:14];[comps setMinute:10];[comps setSecond:0];NSDate *date = [gregorian dateFromComponents:comps];[comps release];
?
?
?Calendar Units
Specify calendrical units such as day and month.
?
enum {
?? NSEraCalendarUnit = kCFCalendarUnitEra,
?? NSYearCalendarUnit = kCFCalendarUnitYear,
?? NSMonthCalendarUnit = kCFCalendarUnitMonth,
?? NSDayCalendarUnit = kCFCalendarUnitDay,
?? NSHourCalendarUnit = kCFCalendarUnitHour,
?? NSMinuteCalendarUnit = kCFCalendarUnitMinute,
?? NSSecondCalendarUnit = kCFCalendarUnitSecond,
?? NSWeekCalendarUnit = kCFCalendarUnitWeek,
?? NSWeekdayCalendarUnit = kCFCalendarUnitWeekday,
?? NSWeekdayOrdinalCalendarUnit = kCFCalendarUnitWeekdayOrdinal
};