NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *now;
NSDateComponents *comps = [[NSDateComponents alloc] init];
NSInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit |
NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
now=[NSDate date];
comps = [calendar components:unitFlags fromDate:now];
//? ? week = [comps weekday];
//? ? month = [comps month];
//? ? day = [comps day];
//? ? hour = [comps hour];
//? ? min = [comps minute];
//? ? sec = [comps second];
//
//? ? //Week:
//? ? 1 --星期天
//? ? 2--星期一
//? ? 3--星期二
//? ? 4--星期三
//? ? 5--星期四
//? ? 6--星期五
//? ? 7--星期六
// 簡單記錄一下ios里面獲取系統(tǒng)時間的方法丹允,以后有別的更詳細(xì)的功能再更新萎馅。
NSString* date;
NSDateFormatter* formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"YYYY-MM-dd%20hh:mm:ss"];
date = [formatter stringFromDate:[NSDate? date]];
//date 顯示為 2011-11-01%2012:12:12
// 想實現(xiàn)查找?guī)滋烨暗臅r間,可以用這個方法
// NSDate* date = [[NSDate alloc] init];
//date = [date dateByAddingTimeInterval:-5*3600*24];
//這是用現(xiàn)在的時間假栓,往前面減5天猾漫,得到的時間点晴。非常好用。做iphone開發(fā)真是享受啊悯周。粒督。
//? ? 摘自 diqun1314的專欄
//? ? NSDate存儲的是世界標(biāo)準(zhǔn)時(UTC),輸出時需要根據(jù)時區(qū)轉(zhuǎn)換為本地時間
//? ? Dates
//? ? NSDate類提供了創(chuàng)建date队橙,比較date以及計算兩個date之間間隔的功能坠陈。Date對象是不可改變的萨惑。
//? ? 如果你要創(chuàng)建date對象并表示當(dāng)前日期捐康,你可以alloc一個NSDate對象并調(diào)用init初始化:
//
NSDate *now = [[NSDate alloc] init];
//
//? ? 或者使用NSDate的date類方法來創(chuàng)建一個日期對象。如果你需要與當(dāng)前日期不同的日期庸蔼,你可以使用NSDate的initWithTimeInterval...或dateWithTimeInterval...方法解总,你也可以使用更復(fù)雜的calendar或date components對象。
//
//? ? 創(chuàng)建一定時間間隔的NSDate對象:
NSTimeInterval secondsPerDay = 24 * 60 * 60;
NSDate *tomorrow = [[NSDate alloc] initWithTimeIntervalSinceNow:secondsPerDay];
NSDate *yesterday = [[NSDate alloc] initWithTimeIntervalSinceNow:-secondsPerDay];
// 使用增加時間間隔的方式來生成NSDate對象:
NSTimeInterval secondsPerDay = 24 * 60 * 60;
NSDate *today = [[NSDate alloc] init];
NSDate *tomorrow, *yesterday;
tomorrow = [today dateByAddingTimeInterval: secondsPerDay];
yesterday = [today dateByAddingTimeInterval: -secondsPerDay];
//? 如果要對NSDate對象進(jìn)行比較姐仅,可以使用isEqualToDate:, compare:, laterDate:和 earlierDate:方法花枫。這些方法都進(jìn)行精確比較刻盐,也就是說這些方法會一直精確比較到NSDate對象中秒一級。例如劳翰,你可能比較兩個日期敦锌,如果他們之間的間隔在一分鐘之內(nèi)則認(rèn)為這兩個日期是相等的。在這種情況下使用佳簸,timeIntervalSinceDate:方法來對兩個日期進(jìn)行比較乙墙。下面的代碼進(jìn)行了示例:
if (fabs([date2 timeIntervalSinceDate:date1]) < 60) ...
//? ? ? ? NSCalendar & NSDateComponents
//? ? ? ? 日歷對象封裝了對系統(tǒng)日期的計算,包括這一年開始生均,總天數(shù)以及劃分听想。你將使用日歷對象對絕對日期與date components(包括年,月马胧,日汉买,時,分佩脊,秒)進(jìn)行轉(zhuǎn)換蛙粘。
//? ? ? ? NSCalendar定義了不同的日歷,包括佛教歷威彰,格里高利歷等(這些都與系統(tǒng)提供的本地化設(shè)置相關(guān))组题。NSCalendar與NSDateComponents對象緊密相關(guān)。
//? ? ? ? 你可以通過NSCalendar對象的currentCalendar方法來獲得當(dāng)前系統(tǒng)用戶設(shè)置的日歷抱冷。
NSCalendar *currentCalendar = [NSCalendar currentCalendar];
NSCalendar *japaneseCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSJapaneseCalendar];
NSCalendar *usersCalendar = [[NSLocale currentLocale] objectForKey:NSLocaleCalendar];
//usersCalendar和currentCalendar對象是相等的崔列,盡管他們是不同的對象。
// 你可以使用NSDateComponents對象來表示一個日期對象的組件——例如年旺遮,月赵讯,日和小時。如果要使一個NSDateComponents對象有意義耿眉,你必須將其與一個日歷對象相關(guān)聯(lián)边翼。下面的代碼示例了如何創(chuàng)建一個NSDateComponents對象:
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay:6];
[components setMonth:5];
[components setYear:2004];
NSInteger weekday = [components weekday]; // Undefined (== NSUndefinedDateComponent)
// 要將一個日期對象解析到相應(yīng)的date components,你可以使用NSCalendar的components:fromDate:方法鸣剪。此外日期本身组底,你需要指定NSDateComponents對象返回組件。
NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents = [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];
NSInteger day = [weekdayComponents day];
NSInteger weekday = [weekdayComponents weekday];
//? ? 同樣你也可以從NSDateComponents對象來創(chuàng)建NSDate對象:
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setWeekday:2]; // Monday
[components setWeekdayOrdinal:1]; // The first Monday in the month
[components setMonth:5]; // May
[components setYear:2008];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:components];
// 為了保證正確的行為筐骇,您必須確保使用的組件在日歷上是有意義的债鸡。指定“出界”日歷組件,如一個-6或2月30日在公歷中的日期值產(chǎn)生未定義的行為铛纬。
// 你也可以創(chuàng)建一個不帶年份的NSDate對象厌均,這樣的操作系統(tǒng)會自動生成一個年份,但在后面的代碼中不會使用其自動生成的年份告唆。
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setMonth:11];
[components setDay:7];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *birthday = [gregorian dateFromComponents:components];
//下面的示例顯示了如何從一個日歷置換到另一個日歷:
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];
NSCalendar *hebrew = [[NSCalendar alloc] initWithCalendarIdentifier:NSHebrewCalendar];
NSUInteger unitFlags = NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit;
NSDateComponents *components = [hebrew components:unitFlags fromDate:date];
NSInteger day = [components day]; // 15
NSInteger month = [components month]; // 9
NSInteger year = [components year]; // 5764