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时间),下面的示例展示了获取当前时间的方法。
NSDate * todayDate = [NSDate date];
NSLog(@"当前时间:%@",todayDate);
2.当前时间指定秒数之后/前的时间
+ (instancetype)dateWithTimeIntervalSinceNow:(NSTimeInterval)secs;
这里返回的时候当前时间之后多少秒的时间。使用负数表示之前多少秒的时间。
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;
指定日期多少秒之后的时间,负数表示指定日期多少秒之前的时间。
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 开始的给定秒数之后的时间,负数表示给定秒数之前的时间。
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 开始的给定秒数之后的时间,负数表示给定秒数之前的时间。
NSDate * tenSecondsAfter1970 = [NSDate dateWithTimeIntervalSince1970:10];
NSLog(@"2001-1-1 00:00:00 之后10秒的时间当前时间:%@",tenSecondsAfter1970);
二、初始化日期
1.init
- (instancetype)init;
这里返回的也是当前的时间
NSDate * nowDate = [[NSDate alloc]init];
NSLog(@"当前时间:%@",nowDate);
2.时间间指定秒数的时间
- (instancetype)initWithTimeIntervalSinceNow:(NSTimeInterval)secs;
NSDate * nowDate = [[NSDate alloc]init];
NSLog(@"当前时间:%@",nowDate);
NSDate * afterTenSecondsDate = [[NSDate alloc]initWithTimeIntervalSinceNow:10];
NSLog(@"10秒钟之后的时间:%@",afterTenSecondsDate);
3.指定时间指定秒数之前/后的时间
- (instancetype)initWithTimeInterval:(NSTimeInterval)secsToBeAdded sinceDate:(NSDate *)date;
NSDate * nowDate = [[NSDate alloc]init];
NSLog(@"当前时间:%@",nowDate);
NSDate * afterTenSecondsDate = [[NSDate alloc]initWithTimeInterval:10 sinceDate:nowDate];
NSLog(@"10秒钟之后的时间:%@",afterTenSecondsDate);
4.2001年指定秒数之后/前的时间
- (instancetype)initWithTimeIntervalSinceReferenceDate:(NSTimeInterval)ti;
NSDate * nowDate = [[NSDate alloc]init];
NSLog(@"当前时间:%@",nowDate);
NSDate * afterTenSecondsFrom2001 = [[NSDate alloc]initWithTimeIntervalSinceReferenceDate:10];
NSLog(@"2001年10秒钟之后的时间:%@",afterTenSecondsFrom2001);
5.1970年指定秒数之后/前的时间
- (instancetype)initWithTimeIntervalSince1970:(NSTimeInterval)secs;
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。
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。
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日期和上面的返回结果刚好相反。
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。
- A < B 返回 NSOrderedAscending
-
A > B 返回 NSOrderedSame
- A == B 返回 NSOrderedDescending
NSDate * nowDate = [NSDate now];=
NSDate * nowDateAfter10Seconds = [NSDate dateWithTimeIntervalSinceNow:10];
NSComparisonResult comparisonResult = [nowDate compare:nowDateAfter10Seconds];
NSLog(@"比较结果:%ld",comparisonResult );
五、获取时间间隔
1.与指定日期的时间间隔
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;
返回和指定日期的时间间隔,单位是秒。
NSDate * nowDate = [NSDate now];
NSDate * nowDateAfter10Seconds = [NSDate dateWithTimeIntervalSinceNow:10];
NSTimeInterval timeInterval = [nowDate timeIntervalSinceDate:nowDateAfter10Seconds];
NSLog(@"nowDate和nowDateAfter10Seconds间隔%lf秒",timeInterval);
2.距离现在的时间间隔
@property (readonly) NSTimeInterval timeIntervalSinceNow;
返回指定日期距离现在的时间间隔。
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日的时间间距,单位是秒。
NSDate * nowDate = [NSDate now];
NSTimeInterval timeInterval = nowDate.timeIntervalSinceReferenceDate;
NSLog(@"timeInterval:%lf秒",timeInterval);
4.距离1970年的时间间隔
@property (readonly) NSTimeInterval timeIntervalSince1970;
返回指定日期距离1970年1月1日的时间间距,单位是秒。
NSDate * nowDate = [NSDate now];
NSTimeInterval timeInterval = nowDate.timeIntervalSince1970;
NSLog(@"timeInterval:%lf秒",timeInterval);
六、时间的运算
- (instancetype)dateByAddingTimeInterval:(NSTimeInterval)ti;
返回指定秒数之后的时间。
NSDate * nowDate = [NSDate now];
NSDate * nowDateAfter = [nowDate dateByAddingTimeInterval:24 * 60 * 60];
NSLog(@"nowDateAfter:%@",nowDateAfter);
相关文章:
iOS NSDate的常用API
目录 一、创建日期 1.获取当前时间 2.当前时间指定秒数之后/前的时间 3.指定日期之后/后的时间 4.2001年之后/前指定秒数的时间 5.1970年之后/后指定秒数的时间 二、初始化日期 1.init 2.时间间指定秒数的时间 3.指定时间指定秒数之前/后的时间 4.2001年指定秒数之后…...
谱方法学习笔记-下(超详细)
谱方法学习笔记📒 谱方法学习笔记-上(超详细) 声明:鉴于CSDN使用 K a T e X KaTeX KaTeX 渲染公式, KaTeX \KaTeX KATEX 与 L a T e X LaTeX LaTeX 不同,不支持直接的交叉引用命令,如\label和\eqref。 KaTeX \KaT…...
iOS--UIPickerView学习
UIPickerView 使用场景和功能UIPickerView遵循代理协议和数据源协议创建对象,添加代理必须实现的代理方法非必要实现的方法demo用到的其他函数提示 效果展示 使用场景和功能 UIPickerView 最常见的用途是作为选项选择器,允许用户从多个选项中选择一个。…...
Docker安装Elasticsearch以及ik分词器
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,Elasticsearch 会集中存储您的数据,让您飞快完成搜索,微调相关性,进行强大的分析ÿ…...
[架构之路-254]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 全程概述
目录 一、软件架构概述 1.1 什么是软件架构 1.2 为什么需要软件架构设计 1.3 软件架构设计在软件设计中位置 (1)软件架构设计(层次划分、模块划分、职责分工): (2)软件高层设计、概要设计…...
centos7上源码安装mysql--运维高级
第一步,安装必要的依赖: yum install -y cmake ncurses-devel bison gcc gcc-c make unzip libaio numactl 第二步,创建mysql用户和组: wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18.tar.gz tar zxvf mysql-5.7.18.tar.gz 第三步,下载MySQL 5.7.18 源码…...
Linux小程序之进度条
> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:自己能实现进度条 > 毒鸡汤: > …...
Grafana采用Nginx反向代理
一、场景介绍 在常规操作中,一般情况下不会放开许多端口给外部访问,特别是直接 ip:port 的方式开放访问。但是 Grafana 的请求方式在默认情况下是没有任何规律可寻的。 为了满足业务需求(后续通过 Nginx 统一一个接口暴露 N 个服务…...
Python接口自动化测试如何设计接口测试用例(详解)
简介 上篇我们已经介绍了什么是接口测试和接口测试的意义。在开始接口测试之前,我们来想一下,如何进行接口测试的准备工作。或者说,接口测试的流程是什么?有些人就很好奇,接口测试要流程干嘛?不就是拿着接口…...
Spring不再支持Java8了
在今天新建模块的时候发现了没有java8的选项了,结果一查发现在11月24日,Spring不再支持8了,这可怎么办呢?我们可以设置来源为阿里云https://start.aliyun.com/ 。 java8没了 设置URL为阿里云的地址...
Android 实现APP可切换多语言
如果是单独给app加上国际化,其实很容易,创建对应的国家资源文件夹即可,如values-en,values-pt,app会根据当前系统语言去使用对应语言资源文件,如果找不到,则使用values文件夹里的资源 但本文讲得是另外一种情况,就是app内置一个切换多语言的页面,可以给用户切换 步骤 1.添加服务…...
Redis大key与热Key
什么是 bigkey? 简单来说,如果一个 key 对应的 value 所占用的内存比较大,那这个 key 就可以看作是 bigkey。具体多大才算大呢?有一个不是特别精确的参考标准: bigkey 是怎么产生的?有什么危害?…...
SQL通配符字符
SQL通配符字符 通配符字符用于替代字符串中的一个或多个字符。通配符字符与LIKE运算符一起使用。LIKE运算符用于在WHERE子句中搜索列中的指定模式。 示例 返回所有以字母 a 开头的客户: SELECT * FROM Customers WHERE CustomerName LIKE a%; 通配符字符 符号…...
力扣 144.二叉树的前序遍历
目录 1.解题思路2.代码实现2.1获得节点数接口:2.2递归接口:2.3最终实现 1.解题思路 该题要利用前序遍历,将树的值存到数组中,所以在申请空间的时候,我们需要知道要申请多少空间,也就是要知道树到底有多少个结点,因此第…...
Ubuntu网络问题的解决
这里写目录标题 ubuntu 显示网络已连接,但是打不开浏览器:imagemagickimagemagick的安装imagick查看版本号imagemagick的命令介绍 ceres solver 介绍 ubuntu 显示网络已连接,但是打不开浏览器: sudo service network-manager sto…...
Git 本地服务器搭建 Windows
git 安装参考:Git的安装、配置、使用01【Git Bash Here命令行操作】-CSDN博客 gitLab 服务端安装及配置参考:Windows环境搭建 Gitlab 服务器_gitlab windows_测试工程师成长之路的博客-CSDN博客...
【数值计算方法(黄明游)】常微分方程初值问题的数值积分法:欧拉方法(向后Euler)【理论到程序】
文章目录 一、数值积分法1. 一般步骤2. 数值方法 二、欧拉方法(Euler Method)1. 向前欧拉法(前向欧拉法)2. 向后欧拉法(后向欧拉法)a. 基本理论b. 算法实现 常微分方程初值问题的数值积分法是一种通过数值方…...
mac安装homebrew/brew遇到443
文章目录 问题描述解决方法方法一方法二 参考文献 问题描述 brew 全称Homebrew 是Mac OSX上的软件包管理工具 想在mac终端安装,运行网上提供的指令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)&quo…...
VSCODE 在新窗口中打开
使用VS习惯了,经常在新窗口中打开查看 但是VSCODE,无法拖动标签到一个新窗口中,一直以为没这个功能 后来发现 使用快捷健 ctlk,o 可以将标签页在新窗口中打开,虽然不如vsstudio方便,不过也可实现在新窗口打开的功能…...
Python与设计模式--解释器模式
23种计模式之 前言 (5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、(11)策略模式、责任链模式、命令模式、中介者模…...
四旋翼变形控制:RL与MPC在混合动力学中的对比
1. 四旋翼变形控制的技术挑战与解决方案四旋翼变形控制(Quadrotor Morpho-Transition)是当前机器人领域最具挑战性的前沿技术之一。这项技术使机器人能够在空中完成形态变换,实现从飞行模式到地面模式的平滑切换。想象一下,一架四…...
告别命令行!用Python脚本批量管理Docker容器,效率提升不止一点点
告别命令行!用Python脚本批量管理Docker容器,效率提升不止一点点每次在终端敲入docker ps、docker stop、docker rm时,你是否想过——当容器数量超过两位数,这种重复劳动是否在消耗你的生命?去年我们团队在迁移微服务架…...
2026在线测评系统十大量表对比:信效度与场景全解析
【30s 核心摘要】2026 年在线测评成人才管理刚需,信效度与场景适配成选型核心。本文聚焦十大量表,从信度、效度、适配场景等维度深度对比,重点解析问卷星、北森、金数据等主流平台的量表能力与落地效果,为企业、高校及机构提供科学…...
上线前最后一道防线,DeepSeek代码审查如何帮你拦截87%的CVE类缺陷?
更多请点击: https://intelliparadigm.com 第一章:上线前最后一道防线,DeepSeek代码审查如何帮你拦截87%的CVE类缺陷? 在软件交付生命周期末期,传统人工代码审计与通用SAST工具常因误报率高、上下文理解弱而漏检高危漏…...
告别数据饥荒:用PyTorch手把手实现原型网络(Prototypical Networks)做电影评论情感分类
告别数据饥荒:用PyTorch手把手实现原型网络做电影评论情感分类 在自然语言处理领域,情感分析一直是热门研究方向,但现实中的开发者常面临一个尴尬困境:标注数据太少。传统深度学习方法动辄需要成千上万的标注样本,而实…...
ssm207基于SSM的视频播放系统的设计与实现+vue(文档+源码)_kaic
第五章 系统的实现5.1 用户功能模块的实现5.1.1系统主界面用户进入本系统可查看系统信息,系统主界面展示如图5.1所示。图5.1网站主界面5.1.2视频详情界面用户可选择视频查看视频详情信息,并可进行视频播放操作,视频详情界面展示如图5.2所示。…...
UE5 Mac环境搭好了,然后呢?给新手的第一个5分钟:创建、操控并理解你的第一个角色
UE5 Mac环境搭好了,然后呢?给新手的第一个5分钟:创建、操控并理解你的第一个角色当你第一次打开UE5的Mac版本,面对那个闪烁着光芒的启动界面,内心可能既兴奋又忐忑。安装只是第一步,真正的旅程现在才开始。…...
Veo 2提示词性能瓶颈诊断:基于1726组AB测试的token敏感度热力图与阈值红线预警
更多请点击: https://kaifayun.com 第一章:Veo 2提示词编写最佳实践总览 Veo 2 是 Google 推出的高性能视频生成模型,其对提示词(prompt)的语义精度、结构清晰度和上下文控制能力高度敏感。高质量提示词并非简单堆砌关…...
基于Netburner NANO54415构建工业级嵌入式Web服务器:从硬件选型到广域监控实战
1. 项目概述:一个为广域与本地监控而生的嵌入式Web服务器如果你正在寻找一个能部署在野外、工厂角落或者任何需要远程数据采集与控制场景下的嵌入式Web服务器方案,并且对市面上那些要么性能孱弱、要么开发门槛极高的开发板感到厌倦,那么这个基…...
GEO优化可以覆盖哪些搜索平台
这是一个非常现实的问题。企业投放资源做GEO,当然希望覆盖面越广越好。那么GEO优化到底能覆盖哪些平台?覆盖到什么程度?不同平台的GEO逻辑有什么差异?GEO平台覆盖的三个层级第一层级:通用大模型AI平台(核心…...
