NSDateFormatter類的簡單運用

NSDateFormatter類,簡單來說就是OC提供好的格式化時間的類,可以將我們獲取的時候格式化為我們自己想要展示的樣子.這就需要了解一些字符的意義.

  • (:)
    時間分割符
  • (/)
    日期分割符
  • (%)
    用于表明不論尾隨什么字母,隨后字符都應(yīng)該以單字母的格式讀取
  • d
    將日顯示為不帶前導(dǎo)零的數(shù)字(如1)
  • dd
    將日顯示為前導(dǎo)零的數(shù)字(如01)
  • EEE
    將日顯示為縮寫形式(如Fri)
  • EEEE
    將日顯示為全名(如Friday)
  • M
    將月份顯示為不帶前導(dǎo)零的數(shù)字(如一月表示為1)
  • MM
    將月份顯示為帶前導(dǎo)零的數(shù)字(如一月表示為01)
  • MMM
    將月份顯示為縮寫形式(如一月表示為Jan)
  • MMMM
    將月份顯示為完整月份名(如一月表示為January)
  • h
    使用12小時制將小時顯示為不帶前導(dǎo)零的數(shù)字
  • hh
    使用12小時制將小時顯示為帶前導(dǎo)零的數(shù)字
  • H
    使用24小時制將小時顯示為不帶前導(dǎo)零的數(shù)字
  • HH
    使用24小時制將小時顯示為帶前導(dǎo)零的數(shù)字
  • m
    將分鐘顯示為不帶前導(dǎo)零的數(shù)字
  • y
    將年份(0-9)顯示為不帶前導(dǎo)零的數(shù)字
  • yy
    以帶前導(dǎo)零的兩位數(shù)字格式顯示年份
  • yyy / yyyy
    以四位數(shù)字格式顯示年份

舉個??

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/M/d(EEEE)H:m";
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"];  
NSLog(@"%@",[formatter stringFromDate:[NSDate date]]);
//2019-01-28 10:17:41.095175+0800 xx[2771:182663] 2019/1/28(月曜日)10:17

正如項目中所遇到的一個需求:將2019/1/1(月曜日)1:1格式的日期轉(zhuǎn)換為20190101010100000這種格式的字符串形式也變得十分簡單.

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/M/d(EEEE)H:m";
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"];
NSDate *date = [formatter dateFromString:@"2019/1/1(月曜日)1:1"];
NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
formatter1.dateFormat = @"yyyyMMddHHmmssSSS";
 NSLog(@"%@",[formatter1 stringFromDate:date]);
//2019-01-28 10:29:16.976366+0800 xx[3132:222756] 20190101010100000

另外我們經(jīng)常會在項目中用到類似計算兩個日期之間相差多少天.這次項目中也用到了這個需求:
需求是算一個某件事件的經(jīng)過時間(經(jīng)過時間 = 現(xiàn)在終端的時間-API請求下來的某個字段對應(yīng)的value)

#define kDateFormat                                          @"yyyyMMdd"
#define kDateFormatWithyyyyMMddHHmmssSSS                     @"yyyyMMddHHmmssSSS"
#define kDateFormatWithyyyyMMddHHmmss                        @"yyyyMMddHHmmss"

#define kWithinTenMinutes                           @"たった今"
#define kTenMinutesToOneHour                        @"%d分前"
#define kOneHourToOneDay                            @"%d時間前"
#define kMoreThanOneDay                             @"%d日前"
- (void)viewDidLoad {
    [super viewDidLoad];
    [self demoTest];
}
- (void)demoTest {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"yyyy/M/d(EEEE)H:m";
    formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"];
    NSDate *date = [formatter dateFromString:@"2019/1/1(月曜日)1:1"];
    NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
    formatter1.dateFormat = kDateFormatWithyyyyMMddHHmmssSSS;
    NSLog(@"%@",[self intervalFromLastDateToNow:[formatter1 stringFromDate:date]]);
  //2019-01-28 11:35:26.752505+0800 xx[9765:484785] 27日前
}
- (NSString *)toDateString:(NSDate *)date withDateFormatter:(NSString *)formatter{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:formatter];
    return [dateFormatter stringFromDate:date];
}
- (NSString *)getTodayDateTotalString {
    NSDate *date = [[NSDate alloc] init];
    return [self toDateString:date withDateFormatter:kDateFormatWithyyyyMMddHHmmssSSS];
}
- (NSString *)intervalFromLastDateToNow: (NSString *) dateString1
{
    if (!dateString1) {
        return kWithinTenMinutes;
    }
    NSString *dateString2 = [self getTodayDateTotalString];
    NSDateFormatter *date=[[NSDateFormatter alloc] init];
    [date setDateFormat:kDateFormatWithyyyyMMddHHmmssSSS];
    
    NSDate *d1=[date dateFromString:dateString1];
    NSTimeInterval late1=[d1 timeIntervalSince1970]*1;
    NSDate *d2=[date dateFromString:dateString2];
    NSTimeInterval late2=[d2 timeIntervalSince1970]*1;
    //経過日時 = 現(xiàn)在日時(端末時間) ? 表示開始日時
    NSTimeInterval aTimer=late2-late1;
    int minute = (int)(aTimer)/60;
    if (minute > (24 * 60)) {
        //1日以上
        return [NSString stringWithFormat:kMoreThanOneDay,(int)(minute/(24 * 60))];
    } else if (minute > 60 && minute < (60 * 24)) {
        //1時間以上?1日未満
        return [NSString stringWithFormat:kOneHourToOneDay,(int)(minute/60)];
    } else if (minute >10 && minute <60) {
        //10分以上?1時間未満
        return [NSString stringWithFormat:kTenMinutesToOneHour,minute];
    } else {
        return kWithinTenMinutes;
    }
}

獲取幾天前 幾天后的方法也非常簡單比如獲取昨天的日期

- (NSString *)toDateString:(NSDate *)date withDateFormatter:(NSString *)formatter{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:formatter];
    return [dateFormatter stringFromDate:date];
}
- (NSString *)getYesterDayDateString {
    NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-(24*60*60)];
    return [self toDateString:yesterday withDateFormatter:kDateFormat];
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锣披,一起剝皮案震驚了整個濱河市桃漾,隨后出現(xiàn)的幾起案子记某,更是在濱河造成了極大的恐慌符喝,老刑警劉巖窒舟,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異精拟,居然都是意外死亡世曾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門霹抛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搓逾,“玉大人,你說我怎么就攤上這事杯拐∈崖撸” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵藕施,是天一觀的道長寇损。 經(jīng)常有香客問我,道長裳食,這世上最難降的妖魔是什么矛市? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮诲祸,結(jié)果婚禮上浊吏,老公的妹妹穿的比我還像新娘。我一直安慰自己救氯,他們只是感情好找田,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著着憨,像睡著了一般墩衙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天漆改,我揣著相機與錄音心铃,去河邊找鬼。 笑死挫剑,一個胖子當著我的面吹牛去扣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播樊破,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼愉棱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了哲戚?” 一聲冷哼從身側(cè)響起奔滑,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惫恼,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澳盐,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡祈纯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了叼耙。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腕窥。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖筛婉,靈堂內(nèi)的尸體忽然破棺而出簇爆,到底是詐尸還是另有隱情,我是刑警寧澤爽撒,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布入蛆,位于F島的核電站,受9級特大地震影響硕勿,放射性物質(zhì)發(fā)生泄漏哨毁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一源武、第九天 我趴在偏房一處隱蔽的房頂上張望扼褪。 院中可真熱鬧,春花似錦粱栖、人聲如沸话浇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽幔崖。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間岖瑰,已是汗流浹背叛买。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蹋订,地道東北人率挣。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像露戒,于是被迫代替她去往敵國和親椒功。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

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