iOS中NSCalendar使用

NSCalendar封裝了系統(tǒng)如何按照年月日的方式來(lái)組織時(shí)間,快速獲取日期對(duì)象的年月日扮碧、時(shí)分秒等相關(guān)信息。

1.獲取當(dāng)前時(shí)間

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents  *components  =  [calendar components:NSCalendarUnitMinute | NSCalendarUnitMonth | NSCalendarUnitHour | NSCalendarUnitDay fromDate:[NSDate date]];
NSLog(@"%ld月%ld日%ld時(shí)%ld分" ,(long)components.month,(long)components.day,(long)components.hour,(long)components.minute);

2.查看今天是在今年的第幾周

NSCalendar *calendar1 = [NSCalendar currentCalendar];
NSInteger week = [calendar1 ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitYear forDate:[NSDate date]];
NSLog(@"今天是今年的第%ld周",(long)week);

3.現(xiàn)在往后3天2小時(shí)

NSDateComponents * components2 = [[NSDateComponents alloc] init];
components2.year = 0;
components2.day = 3;
components2.hour = 2;
NSCalendar *calendar3 = [NSCalendar currentCalendar];
NSDate *currentDate = [NSDate date];
NSDate *nextData = [calendar3 dateByAddingComponents:components2 toDate:currentDate options:NSCalendarMatchStrictly];
NSDateFormatter * formatter1 = [[NSDateFormatter alloc] init];
formatter1.dateFormat = @"yyyy年MM月dd日hh時(shí)mm分ss秒";
NSString * str1 = [formatter1 stringFromDate:nextData];
NSLog(@"%@",str1);

下面通過(guò)兩個(gè)常用的小例子來(lái)實(shí)現(xiàn)
1.需求是一天執(zhí)行一次某個(gè)操作

- (void)setToday:(NSString *)userDefaultsName{
//存儲(chǔ)當(dāng)前時(shí)間
NSCalendar *calendar0 = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar0 components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay) fromDate:[NSDate date]];
NSInteger currentIndex = [[NSString stringWithFormat:@"%ld%ld%ld",(long)components.year,(long)components.month,(long)components.day] integerValue];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setInteger:currentIndex forKey:userDefaultsName];
[userDefaults synchronize];
}

 //檢測(cè)userDefaultsName對(duì)應(yīng)的時(shí)間和當(dāng)前時(shí)間相比是否已經(jīng)超出了一天 yes為已經(jīng)超出
+(BOOL)exceedOneDay:(NSString *)userDefaultsName{
//取出保存的時(shí)間和當(dāng)前時(shí)間進(jìn)行比較看是否超出一天
NSCalendar *calendar0 = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar0 components:(NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitMonth) fromDate:[NSDate date]];
NSInteger todayTimeInDay = [[NSString stringWithFormat:@"%ld%ld%ld",components.year,components.month,components.day]integerValue];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSInteger lastTimeInDay = [userDefaults integerForKey:userDefaultsName];

if (todayTimeInDay>lastTimeInDay) {
    //超出一天
    return YES;
}
return NO;
}

2.在某個(gè)界面上顯示VIP的截止時(shí)間,VIP的時(shí)間是一個(gè)月

static NSString *const limitDate = @"limitDate";
static NSString *const formatPaymentTime = @"formatPaymentTime";
+ (NSString *)persistLimitTime:(NSString *)paymentTime{

//加這一句的目的是因?yàn)樵谥Ц稌r(shí)候本地的時(shí)間格式是下面的樣子浩淘,
//由于項(xiàng)目需求要用到Y(jié)YYY-MM-dd這種格式
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYYMMddHHmmss"];

NSDate *currentPayTime = [formatter dateFromString:paymentTime];
NSDate *recordDate = [[NSUserDefaults standardUserDefaults] objectForKey:limitDate];

[formatter setDateFormat:@"YYYY-MM-dd"];
formatter.timeZone = [NSTimeZone defaultTimeZone];

NSCalendar *calender = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
//時(shí)間比較,這個(gè)目的是有可能續(xù)費(fèi)吴攒,截至?xí)r間需要疊加
if (recordDate) {
    NSComparisonResult result = [calender compareDate:currentPayTime toDate:recordDate toUnitGranularity:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay];
    if (result==NSOrderedAscending) {
        currentPayTime = recordDate;//截止時(shí)間大于當(dāng)前支付時(shí)間
    }
}

//加一個(gè)月张抄,VIP 周期
NSDateComponents *monthComponent = [[NSDateComponents alloc] init];
[monthComponent setMonth:+1];
[monthComponent setYear:0];
[monthComponent setDay:0];

NSDate *toDate = [calender dateByAddingComponents:monthComponent toDate:currentPayTime options:0];
NSDateComponents *component = [calender components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:toDate];
NSDate *dateNew = [calender dateFromComponents:component];
paymentTime = [formatter stringFromDate:dateNew];

[[NSUserDefaults standardUserDefaults] setObject:dateNew forKey:limitDate];
[[NSUserDefaults standardUserDefaults] setObject:paymentTime forKey:formatPaymentTime];
[[NSUserDefaults standardUserDefaults] synchronize];

return paymentTime;
}

//判斷VIP是否過(guò)期  YES:過(guò)期/NO:沒(méi)過(guò)期

+ (BOOL)isExpried{

NSCalendar *calender = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDate *recordDate = [[NSUserDefaults standardUserDefaults] objectForKey:limitDate];

//時(shí)間比較
if (recordDate) {
    NSComparisonResult result = [calender compareDate:[NSDate date] toDate:recordDate toUnitGranularity:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay];
    return result==NSOrderedDescending?YES:NO;
    
}
return YES;

}

以上有不足之處還望指點(diǎn)。
參考鏈接http://www.reibang.com/p/75bb333a7582
更多有關(guān)NSCalendar使用請(qǐng)參考http://www.ithao123.cn/content-10808531.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末洼怔,一起剝皮案震驚了整個(gè)濱河市署惯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌镣隶,老刑警劉巖极谊,帶你破解...
    沈念sama閱讀 212,185評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異安岂,居然都是意外死亡轻猖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,445評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)嗜闻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蜕依,“玉大人,你說(shuō)我怎么就攤上這事⊙撸” “怎么了友瘤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,684評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)檐束。 經(jīng)常有香客問(wèn)我辫秧,道長(zhǎng),這世上最難降的妖魔是什么被丧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,564評(píng)論 1 284
  • 正文 為了忘掉前任盟戏,我火速辦了婚禮,結(jié)果婚禮上甥桂,老公的妹妹穿的比我還像新娘柿究。我一直安慰自己,他們只是感情好黄选,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,681評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布蝇摸。 她就那樣靜靜地躺著,像睡著了一般办陷。 火紅的嫁衣襯著肌膚如雪貌夕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,874評(píng)論 1 290
  • 那天民镜,我揣著相機(jī)與錄音啡专,去河邊找鬼。 笑死制圈,一個(gè)胖子當(dāng)著我的面吹牛们童,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鲸鹦,決...
    沈念sama閱讀 39,025評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼病附,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了亥鬓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,761評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤域庇,失蹤者是張志新(化名)和其女友劉穎嵌戈,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體听皿,經(jīng)...
    沈念sama閱讀 44,217評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熟呛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,545評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尉姨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庵朝。...
    茶點(diǎn)故事閱讀 38,694評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出九府,到底是詐尸還是另有隱情椎瘟,我是刑警寧澤,帶...
    沈念sama閱讀 34,351評(píng)論 4 332
  • 正文 年R本政府宣布侄旬,位于F島的核電站肺蔚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏儡羔。R本人自食惡果不足惜宣羊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,988評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望汰蜘。 院中可真熱鬧仇冯,春花似錦、人聲如沸族操。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,778評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)坪创。三九已至炕婶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間莱预,已是汗流浹背柠掂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,007評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留依沮,地道東北人涯贞。 一個(gè)月前我還...
    沈念sama閱讀 46,427評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像危喉,于是被迫代替她去往敵國(guó)和親宋渔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,580評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • ######先說(shuō)下需求:選擇日期彈出日歷(跟途牛辜限,攜程等差不多就行皇拣。。薄嫡。行) 初識(shí)NSCalendar到寫(xiě)完日歷的...
    只是個(gè)少年閱讀 1,058評(píng)論 0 0
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,806評(píng)論 25 707
  • 站在前輩的肩膀上前行 UIKit框架和Foundation框架 所有的Mac OS X和IOS程序都是由大量的對(duì)象...
    zysmoon閱讀 8,672評(píng)論 0 16
  • 在站牌等車時(shí)氧急,一個(gè)一瘸一拐的蒼老背影闖進(jìn)我的視線,忘記了那是幾路車毫深,卻一直記得那個(gè)老人吩坝,一個(gè)不被溫柔對(duì)待的花甲之人...
    大信砸閱讀 254評(píng)論 0 0
  • 10月24日分享 活在當(dāng)下 還是上周五發(fā)生的事情。 在辦公室發(fā)現(xiàn)其他班的兩個(gè)孩子打打鬧鬧的哑蔫,不受控...
    吳丹丹丹閱讀 214評(píng)論 0 0