NSDateFormatter調整時間格式的代碼
在開發iOS程序時,有時候需要將時間格式調整成自己希望的格式,這個時候我們可以用NSDateFormatter類來處理。
例如:
//實例化一個NSDateFormatter對象
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
//設定時間格式,這裡可以設置成自己需要的格式
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
//用[NSDate date]可以獲取系統當前時間
NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];
//輸出格式為:2010-10-27 10:22:13
NSLog(@”%@”,currentDateStr);
//alloc後對不使用的對象別忘了release
[dateFormatter release];
NSDateComponents
NSDateComponents封裝在一個可擴展的,面向對象的方式的日期組件。它是用來彌補時間的日期和時間組件提供一個指定日期:小時,分鐘,秒,日,月,年,等等。它也可以用來指定的時間,例如,5小時16分鐘。一個NSDateComponents對象不需要定義所有組件領域。當一個NSDateComponents的新實例被創建,日期組件被設置為NSUndefinedDateComponent。
一個NSDateComponents對象本身是毫無意義的;你需要知道它是針對什麼日歷解釋,你需要知道它的值是否是正整數和值是多少。
NSDateComponents的實例不負責回答關於一個日期以外的信息,它是需要先初始化的。例如,如果你初始化一個對象為2004年5月6日,其星期幾NSUndefinedDateComponent,不是星期四。要得到正確的星期幾,你必須創建一個NSCalendar日歷實例,創建一個NSDate對象並使用dateFromComponents:方法,然後使用components:fromDate:檢索平周幾
Getting Information About an NSDateComponents Object
獲取一個NSDateComponents對象的信息
–era 時代
–year 年
–month 月
–day 天
–hour 時
–minute 分
–second 秒
–week
–weekday
–weekdayOrdinal
–quarter 季度
Setting Information for an NSDateComponents Object
設置一個NSDateComponents對象的信息
–setEra:
–setYear:
–setMonth:
–setDay:
–setHour:
–setMinute:
–setSecond:
–setWeek:
–setWeekday:
–setWeekdayOrdinal:
–setQuarter:
例子如下:獲得2004年5月6日是星期幾
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:6];
[comps setMonth:5];
[comps setYear:2004];
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:comps];
[comps release];
NSDateComponents *weekdayComponents =
[gregorian components:NSWeekdayCalendarUnit fromDate:date];
int weekday = [weekdayComponents weekday];
NSLog(@"%d",weekday);
如果需要更加詳細,請查閱“Calendars, Date Components, and Calendar Units”in Date and Time Programming Guide.日期和時間的程序指南
//一段例子:計算距離某一天還有多少時間
NSDate* toDate = [ [ NSDate alloc] initWithString:@"2012-9-29 0:0:00 +0600" ];
NSDate* startDate = [ [ NSDate alloc] init ];
NSCalendar* chineseClendar = [ [ NSCalendar alloc ] initWithCalendarIdentifier:NSGregorianCalendar ];
NSUInteger unitFlags =
NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit;
NSDateComponents *cps = [chineseClendar components:unitFlags fromDate:startDate toDate:toDate options:0];
NSInteger diffHour = [cps hour];
NSInteger diffMin = [cps minute];
NSInteger diffSec = [cps second];
NSInteger diffDay = [cps day];
NSInteger diffMon = [cps month];
NSInteger diffYear = [cps year];
NSLog( @" From Now to %@, diff: Years: %d Months: %d, Days; %d, Hours: %d, Mins:%d, sec:%d",
[toDate description], diffYear, diffMon, diffDay, diffHour, diffMin,diffSec );
[toDate release];
[startDate release];
[chineseClendar release];
摘自 hufeng825的專欄