iOS NSDate的常用API

目录

一、创建日期

1.获取当前时间

2.当前时间指定秒数之后/前的时间

3.指定日期之后/后的时间

4.2001年之后/前指定秒数的时间

5.1970年之后/后指定秒数的时间

二、初始化日期

1.init

2.时间间指定秒数的时间

3.指定时间指定秒数之前/后的时间

4.2001年指定秒数之后/前的时间

三、获取时间边界

1.distantFuture

2.distantPast

四、时间比较

1.比较日期是否相等

2.比较日期是否较早

3.比较日期是否较晚

4.带回调的日期比较的方法

五、获取时间间隔

1.与指定日期的时间间隔

2.距离现在的时间间隔

3.距离2001年的时间间隔

4.距离1970年的时间间隔

六、时间的运算

总结


前言

本文整理了一下NSDate的API,以便需要或者忘记的时候查询下用法,文章末尾贴出了开发过长中常用的NSDate的拓展方法。

系统默认NSDate的默认时间为UTC时间。

一、创建日期

1.获取当前时间

  • (instancetype)date;

这里返回的当前的时间(UTC时间),下面的示例展示了获取当前时间的方法。

objectivec 复制代码
NSDate * todayDate = [NSDate date];
NSLog(@"当前时间:%@",todayDate);

2.当前时间指定秒数之后/前的时间

  • (instancetype)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;

这里返回的时候当前时间之后多少秒的时间。使用负数表示之前多少秒的时间。

objectivec 复制代码
NSDate * todayDate = [NSDate date];
NSLog(@"当前时间:%@",todayDate);
NSDate * afterTenSeconds = [NSDate dateWithTimeIntervalSinceNow:10];
NSLog(@"10秒钟之后的时间:%@",afterTenSeconds);
NSDate * beforeTenSeconds = [NSDate dateWithTimeIntervalSinceNow:-10];
NSLog(@"10秒钟之前的时间:%@",beforeTenSeconds);

3.指定日期之后/后的时间

  • (instancetype)dateWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)date;

指定日期多少秒之后的时间,负数表示指定日期多少秒之前的时间。

objectivec 复制代码
NSDate * todayDate = [NSDate date];    
NSLog(@"当前时间:%@",todayDate);     
NSDate * afterTenSecondDate = [NSDate dateWithTimeInterval:10 sinceDate:todayDate];        
NSDate * beginTenSecondDate = [NSDate dateWithTimeInterval:-10 sinceDate:todayDate];   
NSLog(@"10秒钟之后的时间:%@",afterTenSecondDate);
NSLog(@"10秒钟之后的时间:%@",beginTenSecondDate);

4.2001年之后/前指定秒数的时间

  • (instancetype)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)ti;

返回从 2001 年 1 月 1 日 00:00:00 UTC 开始的给定秒数之后的时间,负数表示给定秒数之前的时间。

objectivec 复制代码
NSDate * todayDate = [NSDate date];
NSLog(@"当前时间:%@",todayDate);
NSDate * tenSecondsAfter2001 = [NSDate dateWithTimeIntervalSinceReferenceDate:10];  
NSLog(@"2001-1-1 00:00:00 之后10秒的时间当前时间:%@",tenSecondsAfter2001);

5.1970年之后/后指定秒数的时间

  • (instancetype)dateWithTimeIntervalSince1970:(NSTimeInterval)secs;

返回从 1970 年 1 月 1 日 00:00:00 UTC 开始的给定秒数之后的时间,负数表示给定秒数之前的时间。

objectivec 复制代码
NSDate * tenSecondsAfter1970 = [NSDate dateWithTimeIntervalSince1970:10];
NSLog(@"2001-1-1 00:00:00 之后10秒的时间当前时间:%@",tenSecondsAfter1970);

二、初始化日期

1.init

  • (instancetype)init;

这里返回的也是当前的时间

objectivec 复制代码
NSDate * nowDate = [[NSDate alloc]init];
NSLog(@"当前时间:%@",nowDate);

2.时间间指定秒数的时间

  • (instancetype)initWithTimeIntervalSinceNow:(NSTimeInterval)secs;
c 复制代码
NSDate * nowDate = [[NSDate alloc]init];    
NSLog(@"当前时间:%@",nowDate);
NSDate * afterTenSecondsDate = [[NSDate alloc]initWithTimeIntervalSinceNow:10];
NSLog(@"10秒钟之后的时间:%@",afterTenSecondsDate);

3.指定时间指定秒数之前/后的时间

  • (instancetype)initWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)date;
objectivec 复制代码
NSDate * nowDate = [[NSDate alloc]init];        
NSLog(@"当前时间:%@",nowDate);
NSDate * afterTenSecondsDate = [[NSDate alloc]initWithTimeInterval:10 sinceDate:nowDate];        
NSLog(@"10秒钟之后的时间:%@",afterTenSecondsDate);

4.2001年指定秒数之后/前的时间

  • (instancetype)initWithTimeIntervalSinceReferenceDate:(NSTimeInterval)ti;
objectivec 复制代码
NSDate * nowDate = [[NSDate alloc]init];        
NSLog(@"当前时间:%@",nowDate);        
NSDate * afterTenSecondsFrom2001 = [[NSDate alloc]initWithTimeIntervalSinceReferenceDate:10];        
NSLog(@"2001年10秒钟之后的时间:%@",afterTenSecondsFrom2001);

5.1970年指定秒数之后/前的时间

  • (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)secs;
objectivec 复制代码
NSDate * nowDate = [[NSDate alloc]init];        
NSLog(@"当前时间:%@",nowDate);        
NSDate * afterTenSecondsFrom1970 = [[NSDate alloc]initWithTimeIntervalSince1970:10];        
NSLog(@"1970年10秒钟之后的时间:%@",afterTenSecondsFrom1970);

三、获取时间边界

1.distantFuture

2.distantPast

四、时间比较

1.比较日期是否相等

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

比较A日期是否和B日期是否相同。相同返回YES,不同返回NO。

objectivec 复制代码
NSDate * nowDate = [NSDate now];
NSDate * nowDateAfter10Seconds = [NSDate dateWithTimeIntervalSinceNow:10];
if ([nowDate isEqualToDate:nowDateAfter10Seconds]) {
    NSLog(@"nowDate == nowDateAfter10Seconds");
} else {
    NSLog(@"nowDate != nowDateAfter10Seconds");
}
if ([[NSDate now] isEqualToDate:[[NSDate alloc]init]]) {
    NSLog(@"equal");
}

2.比较日期是否较早

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

比较A日期是否早于B日期,是的话返回YES,否则返回NO。

objectivec 复制代码
NSDate * nowDate = [NSDate now];
NSDate * nowDateAfter10Seconds = [NSDate dateWithTimeIntervalSinceNow:10];
if ([nowDate isEarlierThanOrEqualTo:nowDateAfter10Seconds]) {
     NSLog(@"nowDate isEarlierThanOrEqualTo nowDateAfter10Seconds"); 
} else {
    NSLog(@"nowDate isNotEarlierThanOrEqualTo nowDateAfter10Seconds");
}

3.比较日期是否较晚

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

比较A日期是否晚与B日期和上面的返回结果刚好相反。

objectivec 复制代码
    
NSDate * nowDate = [NSDate now];
NSDate * nowDateAfter10Seconds = [NSDate dateWithTimeIntervalSinceNow:10];    
if ([nowDate isLaterThan:nowDateAfter10Seconds]) {
   NSLog(@"nowDate isLaterThan nowDateAfter10Seconds");    
} else {
    NSLog(@"nowDate isNotLaterThan nowDateAfter10Seconds");
}

4.带回调的日期比较的方法

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

这里这个方法的返回值是NSComparisonResult类型的枚举,当两个日期完全相同的时候返回NSOrderedSame。

  1. A < B 返回 NSOrderedAscending

  2. A > B 返回 NSOrderedSame

  3. A == B 返回 NSOrderedDescending

objectivec 复制代码
NSDate * nowDate = [NSDate now];=   
NSDate * nowDateAfter10Seconds = [NSDate dateWithTimeIntervalSinceNow:10];  
NSComparisonResult  comparisonResult = [nowDate compare:nowDateAfter10Seconds];
NSLog(@"比较结果:%ld",comparisonResult );

五、获取时间间隔

1.与指定日期的时间间隔

  • (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;

返回和指定日期的时间间隔,单位是秒。

objectivec 复制代码
NSDate * nowDate = [NSDate now];
NSDate * nowDateAfter10Seconds = [NSDate dateWithTimeIntervalSinceNow:10]; 
NSTimeInterval timeInterval = [nowDate timeIntervalSinceDate:nowDateAfter10Seconds]; 
NSLog(@"nowDate和nowDateAfter10Seconds间隔%lf秒",timeInterval);

2.距离现在的时间间隔

@property (readonly) NSTimeInterval timeIntervalSinceNow;

返回指定日期距离现在的时间间隔。

objectivec 复制代码
NSDate * nowDate = [NSDate now];    
NSDate * nowDateAfter10Seconds = [NSDate dateWithTimeIntervalSinceNow:10]; 
NSTimeInterval timeInterval = nowDateAfter10Seconds.timeIntervalSinceNow;  
NSLog(@"timeInterval:%lf秒",timeInterval);

3.距离2001年的时间间隔

@property (readonly) NSTimeInterval timeIntervalSinceReferenceDate;

返回指定日期距离2001年1月1日的时间间距,单位是秒。

objectivec 复制代码
NSDate * nowDate = [NSDate now];    
NSTimeInterval timeInterval = nowDate.timeIntervalSinceReferenceDate;    
NSLog(@"timeInterval:%lf秒",timeInterval);

4.距离1970年的时间间隔

@property (readonly) NSTimeInterval timeIntervalSince1970;

返回指定日期距离1970年1月1日的时间间距,单位是秒。

objectivec 复制代码
NSDate * nowDate = [NSDate now];    
NSTimeInterval timeInterval = nowDate.timeIntervalSince1970;    
NSLog(@"timeInterval:%lf秒",timeInterval);

六、时间的运算

  • (instancetype)dateByAddingTimeInterval:(NSTimeInterval)ti;

返回指定秒数之后的时间。

objectivec 复制代码
NSDate * nowDate = [NSDate now];
NSDate * nowDateAfter = [nowDate dateByAddingTimeInterval:24 * 60 * 60];
NSLog(@"nowDateAfter:%@",nowDateAfter);
相关推荐
Digitally6 小时前
如何将真我(realme)手机数据传输至 iPhone
ios·智能手机·iphone
JFSJHFZJ10 小时前
解密iPhone核心技术,读懂苹果的硬实力
ios·cocoa·iphone
JXSJHF12 小时前
iPhone隐藏功能大盘点,免费好用不占内存
ios·iphone
ZZH_AI项目交付1 天前
为什么很多复杂跳转,最后都得先回首页?
flutter·ios
vx-bot5556661 天前
企业微信ipad协议在客户画像构建中的应用实践
ios·企业微信·ipad
2501_916008891 天前
2026 iOS 证书管理,告别钥匙串依赖,构建可复制的签名环境
android·ios·小程序·https·uni-app·iphone·webview
YJlio1 天前
《Windows 11 从入门到精通》读书笔记 1.4.9:全新的微软应用商店——“库 + 多设备同步”把它从鸡肋变成刚需入口
c语言·网络·python·数码相机·microsoft·ios·iphone
YJlio1 天前
《Windows 11 从入门到精通》读书笔记 1.4.10:集成的微软 Teams——办公与社交的无缝衔接
c语言·网络·python·数码相机·ios·django·iphone
zhangjikuan891 天前
SwiftUI 状态管理与架构实战
ios·架构·swiftui
KevinCyao2 天前
iOS短信营销接口示例代码:Swift/Xcode集成营销短信API的完整开发教程
ios·swift