IOS中關于兩個時間點的比對問題(NSDate)

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
*/

  1. 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);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末泼诱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赊锚,更是在濱河造成了極大的恐慌治筒,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舷蒲,死亡現(xiàn)場離奇詭異耸袜,居然都是意外死亡,警方通過查閱死者的電腦和手機牲平,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門堤框,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事胰锌∑疲” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵资昧,是天一觀的道長酬土。 經(jīng)常有香客問我,道長格带,這世上最難降的妖魔是什么撤缴? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮叽唱,結果婚禮上屈呕,老公的妹妹穿的比我還像新娘。我一直安慰自己棺亭,他們只是感情好虎眨,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著镶摘,像睡著了一般嗽桩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凄敢,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天碌冶,我揣著相機與錄音,去河邊找鬼涝缝。 笑死扑庞,一個胖子當著我的面吹牛,可吹牛的內容都是我干的拒逮。 我是一名探鬼主播罐氨,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼消恍!你這毒婦竟也來了岂昭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤狠怨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后邑遏,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佣赖,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年记盒,在試婚紗的時候發(fā)現(xiàn)自己被綠了憎蛤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖俩檬,靈堂內的尸體忽然破棺而出萎胰,到底是詐尸還是另有隱情,我是刑警寧澤棚辽,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布技竟,位于F島的核電站,受9級特大地震影響屈藐,放射性物質發(fā)生泄漏榔组。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一联逻、第九天 我趴在偏房一處隱蔽的房頂上張望搓扯。 院中可真熱鬧,春花似錦包归、人聲如沸锨推。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽换可。三九已至,卻和暖如春境钟,著一層夾襖步出監(jiān)牢的瞬間锦担,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工慨削, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洞渔,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓缚态,卻偏偏與公主長得像磁椒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子玫芦,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內容