IOS開發(fā)中獲取當前時間的方法是通過NSDate獲取的抬伺。而NSDate是時間在計算機系統(tǒng)內的絕對概念卿叽,具有唯一性惠呼,不可變性蔓彩。但是實際開發(fā)中治笨,常常需要將時間進行某種歷法下的比對(一般常用的是農(nóng)歷、公歷)赤嚼。那么這時的兩個NSDate就需要利用特定的歷法轉化時間戳來比較兩個時間的差值旷赖。
這里需要了解相關的3個對象
NSDate //獲取時間
NSCalendar //歷法對象
NSDateComponents //表示的時間默認以公歷(即陽歷)為參考
1.NSDate是獨立于歷法之外的,它只是時間相對于某個時間點的時間差更卒;這點切記
2.NSCalendar對世界上現(xiàn)存的常用的歷法進行了封裝等孵,既提供了不同歷法的時間信息,又支持日歷的計算蹂空。
//獲取歷法對象的初始化方法
//方法1
NSCalendar *greCalender = [NSCalendar currentCalendar]; /*初始化一個公歷歷法對象*/
//方法2
NSCalendar *greCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; /*初始化一個公歷歷法對象*/
/*
NSGregorianCalendar 只是公歷俯萌,還支持多種歷法 果录,比如NSChineseCalendar
*/
- NSDateComponents是按照NSCalendar的歷法,將NSDate轉換成我們能夠理解的時間格式咐熙。支持年弱恒、月、日棋恼、時返弹、分、秒爪飘。
dateComponents有非常豐富的關于時間轉換琉苇、比較等的功能。主要介紹時間的轉化和兩個Date的對比悦施。
A 時間戳轉化年月日
void timeTestFunction(){
//初始化公歷歷法
NSCalendar *greCakendar = [NSCalendar currentCalendar];
//初始化NSDateComponents對象
/*
components即對時間戳可轉化的對象格式并扇,比如:
NSCalendarUnitYear 代表翻譯成年、NSCalendarUnitMonth 代表翻譯成月等等
注意:需要打印出什么時間單位抡诞,這里必須設置穷蛹。比如需要該時間戳的天,必須有NSCalendarUnitDay昼汗,否則是不會轉化的
特殊:NSCalendarUnitWeekOfYear 一年中的第幾周
NSCalendarUnitWeekOfMonth 一年中的第幾個月
*/
NSDateComponents * dateComponents = [greCakendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitWeekOfYear | NSCalendarUnitWeekOfMonth
fromDate:[NSDate date]];
NSLog(@"年份:%li",(long)dateComponents.year);
NSLog(@"月份:%li",(long)dateComponents.month);
NSLog(@"天數(shù):%li",(long)dateComponents.day);
NSLog(@"小時:%li",(long)dateComponents.hour);
NSLog(@"本年度第幾周:%li",(long)dateComponents.weekOfYear);
NSLog(@"本月第幾周:%li",(long)dateComponents.weekOfMonth);
}
B 兩個NSDate對象對比時間差
void calculateTheDifferenceBetweenOldTimeAndNewTime()
{
//初始化公歷歷法
NSCalendar *greCalender = [NSCalendar currentCalendar];
/*
NSDateComponents的另一個用法:設置一個特定的時間單位肴熏,并將其轉化為NSdate
*/
NSDateComponents * dateComponents = [[NSDateComponents alloc] init];
[dateComponents setDay:1];
[dateComponents setMonth:1];
[dateComponents setYear:1990];
//根據(jù)設置的dateComponents獲取歷法中對象的時間點
//這里的是分秒會使用NSDateComponents中規(guī)定的默認數(shù)值,一般為0和1
NSDate * fromDateComponentsDate = [greCalender dateFromComponents:dateComponents];
//在設置的歷法中顷窒,依照比對的條件返回兩個date之間的時間間隔
NSDateComponents * differenceComponents = [greCalender components:NSCalendarUnitYear
fromDate:fromDateComponentsDate
toDate:[NSDate date] options:0];
NSLog(@"90年距今%li年",differenceComponents.year);
}
C 獲取一個某歷法下XX時間后的時間點
NSCalendar *greCalender = [NSCalendar currentCalendar];
//獲取一個dateComponents并設置時間段
NSDateComponents * dateComponentsAsTimeSet = [[NSDateComponents alloc] init];
[dateComponentsAsTimeSet setDay:6];
//獲取當前歷法下的6天后的時間點
/*
這里還可以自己設年蛙吏、月、日鞋吉、時鸦做、分、秒谓着,根據(jù)個人需求
*/
NSDate * setTimeDate = [greCalender dateByAddingComponents:dateComponentsAsTimeSet
toDate:[NSDate date] options:0];
NSLog(@"%@",setTimeDate);