关于NSDate和NSDateFormatter的几个常用方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于NSDate和NSDateFormatter的几个常用方法相关的知识,希望对你有一定的参考价值。

/**

 *  NSDate常见类方法

 */

 

// 获得当前时间

NSDate *date1 = [NSDate date];   // 类方法

// NSDate *date1 = [[NSDate alloc] init];   // 初始化方法

NSLog(@"%@", date1);

 

 

// 在当前日期基础上加上120(OC中时间大多数都是秒)

NSDate *date2 = [NSDate dateWithTimeIntervalSinceNow:8 * 60 * 60];  // 类方法

// NSDate *date2 = [[NSDate alloc] initWithTimeIntervalSinceNow:120];   // 初始化方法

NSLog(@"%@", date2);

 

// 同理,以下几种情况也都有相应的初始化方法,可以试一下,就不再赘述了

//        NSDate *date3 = [NSDate dateWithTimeInterval:<#(NSTimeInterval)#> sinceDate:<#(nonnull NSDate *)#>];  // 在某个日期的基础上增加

//        NSDate *date4 = [NSDate dateWithTimeIntervalSince1970:<#(NSTimeInterval)#>];   // 1970年的基础上增加

//        NSDate *date5 = [NSDate dateWithTimeIntervalSinceReferenceDate:<#(NSTimeInterval)#>];   // 2001年的基础上增加

 

 

// 用来返回一个极晚的时间点(4001-01-01 00:00:00 +0000

NSDate *date6 = [NSDate distantFuture];

NSLog(@"%@", date6);

// 当然还有返回一个极早的时间点的方法(0000-12-30 00:00:00 +0000)

NSDate *date7 = [NSDate distantPast];

NSLog(@"%@", date7);

 

 

 

/**

 *  NSDate常见对象方法

 */

 

// 返回以当前NSDate对象为基准,偏移多少秒后得到的新NSDate对象

NSDate *date8 = [date2 dateByAddingTimeInterval:120];

NSLog(@"%@", date8);

 

 

// 比较两个时间是否相等

BOOL isEqual = [date7 isEqualToDate:date8];

NSLog(@"%d", isEqual);

 

 

// 比较时间大小

NSComparisonResult result = [date7 compare:date8];

NSLog(@"%ld", result);

 

 

// 比较两个NSDate对象,返回较早/较晚的时间点,并以新NSDate对象的形式返回

NSDate *date9 = [date1 earlierDate:date8];    // 返回较早的时间点

NSLog(@"%@", date9);

 

NSDate *date10 = [date1 laterDate:date8];     // 返回较晚的时间点

NSLog(@"%@", date10);

 

 

// 返回当前对象时间与某个时间点相隔的时间差(秒)(得到的结果若是负数,则表示倒退相应的时间可以回到当前对象按到时间)

// 返回当前对象时间与参数传递的对象时间的相隔秒数,也可以这样理解:从参数时间开始,经过多少秒到达对象执行时间

//        NSInteger x = [date2 timeIntervalSinceDate:date8];

//        NSLog(@"%ld", x);

 

//        NSInteger y = [date2 timeIntervalSinceNow];   //从客户端当前时间开始,经过多少秒到达对象指定时间

//        NSInteger z = [date2 timeIntervalSince1970];   //1970-1-1 0:0:0开始,经过多少秒到达对象指定时间。

//        NSInteger a = [date2 timeIntervalSinceReferenceDate];   //2001-1-1 0:0:0开始,经过多少秒到达对象指定时间。

 

 

 

// NSDateFormatter时间和字符串的转换

 

// 日期转化为字符串

NSDateFormatter *formater = [[NSDateFormatter alloc] init];  //实例化一个NSDateFormatter对象

//formater.dateStyle = kCFDateFormatterFullStyle;

//[formater setDateStyle:NSDateFormatterMediumStyle];  // 系统有好多种格式

[formater setDateFormat:@"GG yyyy-MM-dd EE a hh:mm:ss z"];   //设定时间格式,这里可以设置成自己需要的格式

NSString *str = [formater stringFromDate:date1];   // 定义一个字符串对象来接收输出的时间字符串

NSLog(@"%@", str);

 

// 字符串转换为日期

NSDate *date11 = [formater dateFromString:@"公元 2016-03-29 周二 下午 09:09:58 GMT+8"];

NSLog(@"%@", date11);

 

 

/**

 G -- 纪元

 一般会显示公元前(BC)和公元(AD)

 

 y --

 假如是2013年,那么yyyy=2013yy=13

 

 M --

 假如是3月,那么M=3MM=03MMM=MarMMMM=March

 假如是11月,那么M=11MM=11MMM=NovMMMM=November

 

 w -- 年包含的周

 假如是18日,那么w=2(这一年的第二个周)

 

 W -- 月份包含的周(与日历排列有关)

 假如是2013421日,那么W=4(这个月的第四个周)

 

 F -- 月份包含的周(与日历排列无关)

 和上面的W不一样,F只是单纯以7天为一个单位来统计周,例如7号一定是第一个周,15号一定是第三个周,与日历排列无关。

 

 D -- 年包含的天数

 假如是120日,那么D=20(这一年的第20)

 假如是225日,那么D=31+25=56(这一年的第56)

 

 d -- 月份包含的天数

 假如是5号,那么d=5dd=05

 假如是15号,那么d=15dd=15

 

 E -- 星期

 假如是星期五,那么E=FriEEEE=Friday

 

 a -- 上午(AM)/下午(PM)

 

 H -- 24小时制,显示为0--23

 假如是午夜00:40,那么H=0:40HH=00:40

 

 h -- 12小时制,显示为1--12

 假如是午夜00:40,那么h=12:40

 

 K -- 12小时制,显示为0--11

 假如是午夜00:40,那么K=0:40KK=00:40

 

 k -- 24小时制,显示为1--24

 假如是午夜00:40,那么k=24:40

 

 m -- 分钟

 假如是5分钟,那么m=5mm=05

 假如是45分钟,那么m=45mm=45

 

 s --

 假如是5秒钟,那么s=5ss=05

 假如是45秒钟,那么s=45ss=45

 

 S -- 毫秒

 一般用SSS来显示

 

 z -- 时区

 表现形式为GMT+08:00

 

 Z -- 时区

 表现形式为+0800

 */

以上是关于关于NSDate和NSDateFormatter的几个常用方法的主要内容,如果未能解决你的问题,请参考以下文章

NSDate NSDateFormatter

iOS NSDate 和 NSDateFormatter 行为

NSDateFormatter 和 NSDateComponents 的输出 NSDate 之间的区别

iOS NSDate,NSDateFormatter,NSTimeZone,NSTimeInterval

如何使用 nsdateformatter 将 nsdate 转换为另一种格式

Foundation框架下的常用类(NSNumber, NSValue, NSDate,NSDateFormatter)