iOS ~ 時間和時間戳 互轉(zhuǎn)虚婿,或使用NSCalendar類

  • 1旋奢、獲取當前時間
//獲取當前時間
- (NSString *)currentDateStr{
    NSDate *currentDate = [NSDate date];//獲取當前時間,日期
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];// 創(chuàng)建一個時間格式化對象
    [dateFormatter setDateFormat:@"YYYY/MM/dd hh:mm:ss SS "];//設定時間格式,這里可以設置成自己需要的格式
    NSString *dateString = [dateFormatter stringFromDate:currentDate];//將時間轉(zhuǎn)化成字符串
    return dateString;
}

  • 2然痊、獲取當前時間戳
pragma mark 當前時間戳
+ (NSString *)nowTimeInterval {
    // 現(xiàn)在的時間戳
    
    // 獲取當前時間0秒后的時間
    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:0];
    // *1000 是精確到毫秒至朗,不乘就是精確到秒
    NSTimeInterval time = [date timeIntervalSince1970]*1000;
    NSString *timeStr = [NSString stringWithFormat:@"%.0f", time];
    return timeStr;
}
  • 3、時間戳 轉(zhuǎn)日期
#pragma mark 時間戳 轉(zhuǎn)日期 (yyyy-MM-dd)
+ (NSString *)timeWithYearMonthDayCountDown:(NSString *)timestamp {
    // 時間戳轉(zhuǎn)日期
    
    // 傳入的時間戳timeStr如果是精確到毫秒的記得要/1000
    NSTimeInterval timeInterval = [timestamp doubleValue]/1000;
    NSDate *detailDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    // 實例化一個NSDateFormatter對象剧浸,設定時間格式锹引,這里可以設置成自己需要的格式
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSString *dateStr = [dateFormatter stringFromDate:detailDate];

    return dateStr;
}

  • 4矗钟、字符串轉(zhuǎn)時間戳
// 字符串轉(zhuǎn)時間戳 如:2017-4-10 17:15:10 (精確到毫秒*1000)
+ (NSString *)getTimeStrWithString:(NSString *)str {
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];// 創(chuàng)建一個時間格式化對象
    [dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; //設定時間的格式
    NSDate *tempDate = [dateFormatter dateFromString:str];//將字符串轉(zhuǎn)換為時間對象
    NSString *timeStr = [NSString stringWithFormat:@"%ld", (long)[tempDate timeIntervalSince1970]*1000];//字符串轉(zhuǎn)成時間戳,精確到毫秒*1000
    return timeStr;
}
  • 5、時間戳 轉(zhuǎn)換成 (天 時 分 秒)
#pragma mark 轉(zhuǎn)換成 (天 時 分 秒)
+ (NSString *)timeFormatted:(NSInteger)totalSeconds {
    
//    NSInteger seconds = totalSeconds % 60;
//    NSInteger minutes = (totalSeconds / 60) % 60;
//    NSInteger hours = totalSeconds / 3600 % 24;
//    NSInteger day = totalSeconds / 3600 / 24;
    
    NSInteger day = (totalSeconds/(3600*24));
    NSInteger hour = ((totalSeconds-day*24*3600)/3600);
    NSInteger minute = (totalSeconds-day*24*3600-hour*3600)/60;
    NSInteger second = totalSeconds - day*24*3600 - hour*3600 - minute*60;

    return [NSString stringWithFormat:@"%ld天%ld時%ld分%ld秒", day, hour, minute, second];
    
}
  • 6嫌变、時間戳轉(zhuǎn)日期
#pragma mark 時間戳 轉(zhuǎn)日期 (yyyy-MM-dd HH:mm:ss SS)
// 時間戳轉(zhuǎn)時間,時間戳為13位是精確到毫秒的吨艇,10位精確到秒
+ (NSString *)dateWithTimeInterval:(NSString *)timeStr {
    
    // 傳入的時間戳timeStr如果是精確到秒的記得要/1000
    NSTimeInterval timeInterval = [timeStr doubleValue]/1000;
    NSDate *detailDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    // 實例化一個NSDateFormatter對象,設定時間格式腾啥,這里可以設置成自己需要的格式
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss SS"];
    NSString *dateStr = [dateFormatter stringFromDate:detailDate];

    return dateStr;
}
  • 7东涡、字符串轉(zhuǎn)時間戳
// 字符串轉(zhuǎn)時間戳 如:2017-4-10 17:15:10
- (NSString *)getTimeStrWithString:(NSString *)str{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];// 創(chuàng)建一個時間格式化對象
    [dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; //設定時間的格式
    NSDate *tempDate = [dateFormatter dateFromString:str];//將字符串轉(zhuǎn)換為時間對象
    NSString *timeStr = [NSString stringWithFormat:@"%ld", (long)[tempDate timeIntervalSince1970]*1000];//字符串轉(zhuǎn)成時間戳,精確到毫秒*1000
    return timeStr;
}
  • 8、獲取某一天是星期幾
// 1倘待、獲取某一天是星期幾
+(NSString *)getWeekDayFordate:(NSTimeInterval)data{
    NSArray *weekday = [NSArray arrayWithObjects:[NSNull null], @"7",@"1", @"2", @"3", @"4", @"5", @"6", nil];
    
    NSDate *newDate = [NSDate dateWithTimeIntervalSince1970:data];
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDateComponents *components = [calendar components:NSCalendarUnitWeekday fromDate:newDate];
    
    NSString *weekStr = [weekday objectAtIndex:components.weekday];
    
    return weekStr;
}
#pragma mark 1疮跑、獲取某一天是星期幾
+(NSString *)getWeekDayForDateTimeStamp:(NSTimeInterval)timeStamp{
    
    NSArray *weekday = [NSArray arrayWithObjects:[NSNull null], @"周日",@"周一", @"周二", @"周三", @"周四", @"周五", @"周六", nil];
    
    NSDate *newDate = [NSDate dateWithTimeIntervalSince1970:timeStamp];
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDateComponents *components = [calendar components:NSCalendarUnitWeekday fromDate:newDate];
    
    NSString *weekStr = [weekday objectAtIndex:components.weekday];
    
    return weekStr;
}
  • 9、獲取當月的天數(shù)
+(NSInteger)getNumberOfDaysInCurrentMonth
{
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:[NSDate date]];
    NSUInteger numberOfDaysInMonth = range.length;
    
    return numberOfDaysInMonth;
}
  • 10凸舵、剛剛祖娘、幾分鐘之前、幾小時之前啊奄、幾天渐苏、幾月、幾年之前
+ (NSString *)jk_time1TurnStringTimestamp:(NSString *)timestamp
{
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:[timestamp doubleValue]];
    
    NSTimeInterval  timeInterval = [date timeIntervalSinceNow];
    
    NSInteger seconds = round(timeInterval);
    
    if (seconds < 0) {
        return @"";
    }
    if (seconds < 60) {
        return @"剛剛";
    }else if (seconds < 3600) {
        return [NSString stringWithFormat:@"%ld分鐘之前",seconds/60];
    }else if (seconds < 3600*24){
        return [NSString stringWithFormat:@"%ld小時之前",seconds/(3600)];
    }else if (seconds < (3600*24*30)){
        return [NSString stringWithFormat:@"%ld天之前",seconds/(3600*24)];
    }else if (seconds < (3600*24*30*12)){
        return [NSString stringWithFormat:@"%ld月之前",seconds/(3600*24*30)];
    }else{
        return [NSString stringWithFormat:@"%ld年之前",seconds/(3600*24*30*12)];
    }
}
  • 11菇夸、兩個日期NSDate之間相隔多少天(月整以、年)

1.根據(jù)兩個日期(NSDate),算出它們相差多少天峻仇。

解決方法

NSCalendar類提供了計算差值的接口,可以計算兩個日期相差多少年月日時分秒等

代碼

    //創(chuàng)建兩個日期
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSDate *startDate = [dateFormatter dateFromString:@"2017-07-26"];
    NSDate *endDate = [dateFormatter dateFromString:@"2017-09-01"];

    //利用NSCalendar比較日期的差異
    NSCalendar *calendar = [NSCalendar currentCalendar];
    /**
     * 要比較的時間單位,常用如下,可以同時傳:
     *    kCFCalendarUnitYear : 年
     *    kCFCalendarUnitMonth : 月
     *    NSCalendarUnitDay : 天
     *    kCFCalendarUnitHour : 小時
     *    kCFCalendarUnitMinute : 分鐘
     *    kCFCalendarUnitSecond : 秒
     */
    
    NSCalendarUnit unit = NSCalendarUnitDay;//只比較天數(shù)差異
    //比較的結(jié)果是NSDateComponents類對象
    NSDateComponents *delta = [calendar components:unit fromDate:startDate toDate:endDate options:0];
    //打印
    NSLog(@"%@",delta);
    //獲取其中的"天"
    NSLog(@"%ld",delta.day);

打印結(jié)果

image

注意事項

1邑商、如果同時比較月摄咆、天的時候,結(jié)果是N個月零N天人断,不會再是37天吭从,例如

    NSCalendarUnit unit1 = NSCalendarUnitDay | NSCalendarUnitMonth;//同時比較天數(shù)、月份差異
    //比較的結(jié)果是NSDateComponents類對象
    NSDateComponents *delta1 = [calendar components:unit1 fromDate:startDate toDate:endDate options:0];
    //打印
    NSLog(@"%@",delta1);

打印結(jié)果

image

即1個月零6天恶迈。

2涩金、在遇到2月,閏年等不標準時期暇仲,這種方式的運算結(jié)果非常準確步做。

12、返回當前時間的: 年奈附、月全度、日、小時斥滤、分鐘将鸵、秒
#pragma mark --  返回當前時間的: 年勉盅、月、日顶掉、小時草娜、分鐘、秒 --
+ (NSDictionary *)dateCalendarReturnYear_Month_Day_Hour_Minute_Second {
    
    /** iOS 獲取當前的年痒筒、月宰闰、日、小時凸克、分鐘议蟆、秒 */
    // 獲取當前的date
    NSDate *nowDate = [NSDate date];
    // 使用NSCalendar 計算詳細的時間
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSUInteger unitFlags = kCFCalendarUnitYear | //年
                           kCFCalendarUnitMonth | //月份
                           NSCalendarUnitDay | //日
                           kCFCalendarUnitHour |  //小時
                           kCFCalendarUnitMinute |  //分鐘
                           kCFCalendarUnitSecond;  // 秒
    
    NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:nowDate];

    NSInteger year = [dateComponent year];
    NSInteger month = [dateComponent month];
    NSInteger day = [dateComponent day];
    NSInteger hour = [dateComponent hour];
    NSInteger minute = [dateComponent minute];
    NSInteger second = [dateComponent second];
    
    NSDictionary *dateDic = @{
        @"year":[NSString stringWithFormat:@"%ld", year],
        @"month":[NSString stringWithFormat:@"%ld", month],
        @"day":[NSString stringWithFormat:@"%ld", day],
        @"hour":[NSString stringWithFormat:@"%ld", hour],
        @"minute":[NSString stringWithFormat:@"%ld", minute],
        @"second":[NSString stringWithFormat:@"%ld", second]
    };
    
    return dateDic;
}
13、獲取當前時間~未來一周的數(shù)據(jù)萎战, 數(shù)組包含 周幾咐容、日期幾月幾號:[NSDate dateWithTimeIntervalSinceNow:0]; // 如果是0 的話,就是當前時間
/** 數(shù)組包含 周幾蚂维、日期幾號 */
- (NSArray *)getWeekDateArray {
    // 獲取當前時間開始戳粒,未來一周的時間數(shù)組,只要日期:幾日
    NSMutableArray *weekArr = [NSMutableArray arrayWithCapacity:0];
    for (int i = 0; i < 7; i++) {
        
        //從現(xiàn)在開始的24小時
        NSTimeInterval currentTimeInterval = i * 24*60*60;
        
        NSDate *curDate = [NSDate dateWithTimeIntervalSinceNow:currentTimeInterval]; // 如果是0 的話虫啥,就是當前時間
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"dd"];
        NSString *dateStr = [dateFormatter stringFromDate:curDate];//幾月幾號
        //NSString *dateStr = @"5月31日";
        NSDateFormatter *weekFormatter = [[NSDateFormatter alloc] init];
        [weekFormatter setDateFormat:@"EEEE"];//星期幾 @"HH:mm 'on' EEEE MMMM d"];
        NSString *weekStr = [weekFormatter stringFromDate:curDate];
        
        //轉(zhuǎn)換文案
        weekStr = [self transWeekName:weekStr];
        
        //組合時間
        NSString *strTime = [NSString stringWithFormat:@"%@-%@",dateStr,weekStr];
        
        NSLog(@"%@", strTime);
        
        NSDictionary *dateDic = @{
            @"week":weekStr,
            @"day":dateStr
        };
        
        [weekArr addObject:dateDic];
    }
    
    return [weekArr copy];
}

- (NSString *)transWeekName:(NSString *)orrignWeekName {
    NSString *targetWeekName = @"";
    
    //轉(zhuǎn)換文案
    if ([orrignWeekName isEqualToString:@"Monday"]) {
        targetWeekName = @"周一";
    }
    else if ([orrignWeekName isEqualToString:@"Tuesday"]) {
        targetWeekName = @"周二";
    }
    else if ([orrignWeekName isEqualToString:@"Wednesday"]) {
        targetWeekName = @"周三";
    }
    else if ([orrignWeekName isEqualToString:@"Thursday"]) {
        targetWeekName = @"周四";
    }
    else if ([orrignWeekName isEqualToString:@"Friday"]) {
        targetWeekName = @"周五";
    }
    else if([orrignWeekName isEqualToString:@"Saturday"]) {
        targetWeekName = @"周六";
    } else { // Sunday
        targetWeekName = @"周日";
    }
    
    return targetWeekName;
}

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔚约,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涂籽,更是在濱河造成了極大的恐慌苹祟,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件评雌,死亡現(xiàn)場離奇詭異树枫,居然都是意外死亡,警方通過查閱死者的電腦和手機景东,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門砂轻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斤吐,你說我怎么就攤上這事搔涝。” “怎么了和措?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵庄呈,是天一觀的道長。 經(jīng)常有香客問我臼婆,道長抒痒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任颁褂,我火速辦了婚禮故响,結(jié)果婚禮上傀广,老公的妹妹穿的比我還像新娘。我一直安慰自己彩届,他們只是感情好伪冰,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著樟蠕,像睡著了一般贮聂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寨辩,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天吓懈,我揣著相機與錄音,去河邊找鬼靡狞。 笑死耻警,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的甸怕。 我是一名探鬼主播甘穿,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼梢杭!你這毒婦竟也來了温兼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤武契,失蹤者是張志新(化名)和其女友劉穎募判,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咒唆,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡兰伤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了钧排。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡均澳,死狀恐怖恨溜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情找前,我是刑警寧澤糟袁,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站躺盛,受9級特大地震影響项戴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜槽惫,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一周叮、第九天 我趴在偏房一處隱蔽的房頂上張望辩撑。 院中可真熱鬧,春花似錦仿耽、人聲如沸合冀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽君躺。三九已至,卻和暖如春开缎,著一層夾襖步出監(jiān)牢的瞬間棕叫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工奕删, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俺泣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓急侥,卻偏偏與公主長得像砌滞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子坏怪,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

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