博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSDate时间类/NSDateFormatter日期格式类
阅读量:5290 次
发布时间:2019-06-14

本文共 3374 字,大约阅读时间需要 11 分钟。

 

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {

 

    // NSDate 时间类 继承自NSObject,表示一个时间点;

    NSDate *date = [NSDate date];

    // 打印结果是:格里尼治时间:零时区(世界标准时间) 年-月-日 时:分:秒 +时区

    NSLog(@"%@", date);

    

    /*******************  NSTimeInterval 时间间隔  ********************/

    

    // [NSDate dateWithTimeIntervalSinceNow:(NSTimeInterval)]

    // NSTimeInterval(表示时间间隔) 本质就是double数据类型

    // 在零时区的基础上间隔8个小时就是东八区的时间

    // 北京时间

     NSDate *date1 = [NSDate dateWithTimeIntervalSinceNow:8*60*60];

     NSLog(@"%@", date1);

 

    // 明天的现在时刻

     NSDate *nextDay = [NSDate dateWithTimeIntervalSinceNow:24*60*60 + 8*60*60];

     NSLog(@"%@", nextDay);

    

    // 明年的现在时刻

     NSDate *nextYear = [NSDate dateWithTimeIntervalSinceNow:(366*24 + 8) * 60 * 60];

     NSLog(@"%@", nextYear);

    

    // 计算给定时间点和当前时间点的时间间隔

    NSTimeInterval interval = nextDay.timeIntervalSinceNow;

    // 得到的是距离标准时间的时间间隔

    NSLog(@"%.2f", interval/3600);

    

    // 计算两个时间点的时间间隔

    NSTimeInterval interval2 = [nextDay timeIntervalSinceDate:date1];

    NSLog(@"%.2f", interval2/3600);

 

    /*************************   时间戳  *****************************/

    

    // 时间戳:一个时间点距离1970.1.1的时间间隔,这个时间以秒为单位,就叫做时间戳

    NSTimeInterval interval3 = [date timeIntervalSince1970];

    NSLog(@"%.2f", interval3);

    

    // 将时间戳转换为时间对象

    NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:60];

    NSLog(@"%@", date2);

    

    // 获取北京时间

    NSDate *date3 = [date dateByAddingTimeInterval:8*60*60];

    NSLog(@"%@", date3);

    

    // 例子: 计算一个当前时间和一个固定时间的差值,如果差值在60秒之内,则输出"刚刚", 如果差值在60~3600秒之内,则输出在"xx分钟之前",如果在3600~24*3600之内,则输出"xx小时之前",如果在24*3600秒之外输出输出固定时间

    // 创建一个固定时间

    NSDate *nowDate = [NSDate date];

    NSDate *pastDate = [NSDate dateWithTimeIntervalSinceNow:-25*3600];

    

    // 计算固定时间和当前时间的时间间隔

    NSTimeInterval interval4 = [nowDate timeIntervalSinceDate:pastDate];

    // 验证

    NSLog(@"%.2f", interval4);

    // 判断

    if (interval4 <= 60) {

        NSLog(@"刚刚");

    } else if(interval4 <= 3600){

        NSLog(@"%.f分钟之前",interval4 / 60);

    }else if(interval4 <= 24 * 3600){

        NSLog(@"%.f小时之前", interval4 / 3600);

    }else{

        NSLog(@"%@", pastDate);

    }

 

/******************************   NSDateFormatter 日期格式类   **************************************/

    

    // 继承自NSFormatter,主要作用将NSDate对象转为某种格式,然后以字符串的形式输出

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    

    // 设置日期格式中用到的字母的作用: y:年 M:月 d:日 H:时 m:分 s:秒

    [formatter setDateFormat:@"yyyy年MM月dd号 HH时mm分ss秒"];

    NSDate *date4 = [NSDate date];

    

    // 将时间对象转为设定格式, 格式化的时候会自动加上距离零时区的时间间隔

    NSString *dateString = [formatter stringFromDate:date4];

    NSLog(@"%@", dateString);

    

    // 反过来将时间字符串转换为NSDate对象

    // 例如: @"2016年05月05号 21时50分20秒"

    

    // 创建时间格式对象

    NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];

    [formatter1 setDateFormat:@"yyyy年MM月dd号 HH时mm分ss秒"];

    // 准备时间字符串

    NSString *dateString1 =  @"2016年05月05号 21时50分20秒";

    // 使用时间格式对象借助时间字符串初始化时间对象

    NSDate *date5 = [formatter1 dateFromString:dateString1];

    // 转过来的时间会回归到零时区时间

    NSLog(@"%@", date5);

    

    // 如果想得到北京时间需要手动加上8小时

    NSDate *date6 = [date5 dateByAddingTimeInterval:8*60*60];

    NSLog(@"%@" ,date6);

    

/******************************   日期之间最常用的比较方法调用   **************************************/

     

     // 与otherDate比较,相同返回YES

     - (BOOL)isEqualToDate:(NSDate *)otherDate;

     

     // 与anotherDate比较,返回较早的那个日期

     - (NSDate *)earlierDate:(NSDate *)anotherDate;

     

     // 与anotherDate比较,返回较晚的那个日期

     - (NSDate *)laterDate:(NSDate *)anotherDate;

     

     // 该方法用于排序时调用:

     - (NSComparisonResult)compare:(NSDate *)other;

      当实例保存的日期值与anotherDate相同时返回NSOrderedSame

      当实例保存的日期值晚于anotherDate时返回NSOrderedDescending

      当实例保存的日期值早于anotherDate时返回NSOrderedAscending

     

    return 0;

}

 

转载于:https://www.cnblogs.com/Mr-zyh/p/5463572.html

你可能感兴趣的文章
P2902 [USACO08MAR]珍珠配对Pearl Pairing
查看>>
P1852 [国家集训队]跳跳棋
查看>>
P1318 积水面积
查看>>
P1572 计算分数
查看>>
P1056 排座椅
查看>>
P5535 【XR-3】小道消息
查看>>
P1033 自由落体
查看>>
P2706 巧克力
查看>>
#575. 列车调度
查看>>
P1144 最短路计数
查看>>
P1209 [USACO1.3]修理牛棚 Barn Repair
查看>>
P2904 [USACO08MAR]跨河River Crossing
查看>>
P4379 [USACO18OPEN]Lemonade Line
查看>>
P1109 学生分组
查看>>
P3650 [USACO1.3]滑雪课程设计Ski Course Design
查看>>
P2789 直线交点数
查看>>
P4432 [COCI2017-2018#2] ZigZag
查看>>
#578. 收集卡片
查看>>
#584. 天天去哪吃
查看>>
P2095 营养膳食
查看>>