当前位置: 首页 > news >正文

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。  

  1. A < B     返回 NSOrderedAscending
  2. A > B     返回 NSOrderedSame

  3. 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年指定秒数之后…...

谱方法学习笔记-下(超详细)

谱方法学习笔记&#x1f4d2; 谱方法学习笔记-上(超详细) 声明&#xff1a;鉴于CSDN使用 K a T e X KaTeX KaTeX 渲染公式&#xff0c; KaTeX \KaTeX KATE​X 与 L a T e X LaTeX LaTeX 不同&#xff0c;不支持直接的交叉引用命令&#xff0c;如\label和\eqref。 KaTeX \KaT…...

iOS--UIPickerView学习

UIPickerView 使用场景和功能UIPickerView遵循代理协议和数据源协议创建对象&#xff0c;添加代理必须实现的代理方法非必要实现的方法demo用到的其他函数提示 效果展示 使用场景和功能 UIPickerView 最常见的用途是作为选项选择器&#xff0c;允许用户从多个选项中选择一个。…...

Docker安装Elasticsearch以及ik分词器

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心&#xff0c;Elasticsearch 会集中存储您的数据&#xff0c;让您飞快完成搜索&#xff0c;微调相关性&#xff0c;进行强大的分析&#xff…...

[架构之路-254]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 全程概述

目录 一、软件架构概述 1.1 什么是软件架构 1.2 为什么需要软件架构设计 1.3 软件架构设计在软件设计中位置 &#xff08;1&#xff09;软件架构设计&#xff08;层次划分、模块划分、职责分工&#xff09;&#xff1a; &#xff08;2&#xff09;软件高层设计、概要设计…...

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小程序之进度条

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;自己能实现进度条 > 毒鸡汤&#xff1a; > …...

Grafana采用Nginx反向代理

一、场景介绍 在常规操作中&#xff0c;一般情况下不会放开许多端口给外部访问&#xff0c;特别是直接 ip:port 的方式开放访问。但是 Grafana 的请求方式在默认情况下是没有任何规律可寻的。 为了满足业务需求&#xff08;后续通过 Nginx 统一一个接口暴露 N 个服务&#xf…...

Python接口自动化测试如何设计接口测试用例(详解)

简介 上篇我们已经介绍了什么是接口测试和接口测试的意义。在开始接口测试之前&#xff0c;我们来想一下&#xff0c;如何进行接口测试的准备工作。或者说&#xff0c;接口测试的流程是什么&#xff1f;有些人就很好奇&#xff0c;接口测试要流程干嘛&#xff1f;不就是拿着接口…...

Spring不再支持Java8了

在今天新建模块的时候发现了没有java8的选项了&#xff0c;结果一查发现在11月24日&#xff0c;Spring不再支持8了&#xff0c;这可怎么办呢&#xff1f;我们可以设置来源为阿里云https://start.aliyun.com/ 。 java8没了 设置URL为阿里云的地址...

Android 实现APP可切换多语言

如果是单独给app加上国际化,其实很容易,创建对应的国家资源文件夹即可,如values-en,values-pt,app会根据当前系统语言去使用对应语言资源文件,如果找不到,则使用values文件夹里的资源 但本文讲得是另外一种情况,就是app内置一个切换多语言的页面,可以给用户切换 步骤 1.添加服务…...

Redis大key与热Key

什么是 bigkey&#xff1f; 简单来说&#xff0c;如果一个 key 对应的 value 所占用的内存比较大&#xff0c;那这个 key 就可以看作是 bigkey。具体多大才算大呢&#xff1f;有一个不是特别精确的参考标准&#xff1a; bigkey 是怎么产生的&#xff1f;有什么危害&#xff1f;…...

SQL通配符字符

SQL通配符字符 通配符字符用于替代字符串中的一个或多个字符。通配符字符与LIKE运算符一起使用。LIKE运算符用于在WHERE子句中搜索列中的指定模式。 示例 返回所有以字母 a 开头的客户&#xff1a; SELECT * FROM Customers WHERE CustomerName LIKE a%; 通配符字符 符号…...

力扣 144.二叉树的前序遍历

目录 1.解题思路2.代码实现2.1获得节点数接口:2.2递归接口:2.3最终实现 1.解题思路 该题要利用前序遍历&#xff0c;将树的值存到数组中&#xff0c;所以在申请空间的时候&#xff0c;我们需要知道要申请多少空间&#xff0c;也就是要知道树到底有多少个结点&#xff0c;因此第…...

Ubuntu网络问题的解决

这里写目录标题 ubuntu 显示网络已连接&#xff0c;但是打不开浏览器&#xff1a;imagemagickimagemagick的安装imagick查看版本号imagemagick的命令介绍 ceres solver 介绍 ubuntu 显示网络已连接&#xff0c;但是打不开浏览器&#xff1a; sudo service network-manager sto…...

Git 本地服务器搭建 Windows

git 安装参考&#xff1a;Git的安装、配置、使用01【Git Bash Here命令行操作】-CSDN博客 gitLab 服务端安装及配置参考&#xff1a;Windows环境搭建 Gitlab 服务器_gitlab windows_测试工程师成长之路的博客-CSDN博客...

【数值计算方法(黄明游)】常微分方程初值问题的数值积分法:欧拉方法(向后Euler)【理论到程序】

文章目录 一、数值积分法1. 一般步骤2. 数值方法 二、欧拉方法&#xff08;Euler Method&#xff09;1. 向前欧拉法&#xff08;前向欧拉法&#xff09;2. 向后欧拉法&#xff08;后向欧拉法&#xff09;a. 基本理论b. 算法实现 常微分方程初值问题的数值积分法是一种通过数值方…...

mac安装homebrew/brew遇到443

文章目录 问题描述解决方法方法一方法二 参考文献 问题描述 brew 全称Homebrew 是Mac OSX上的软件包管理工具 想在mac终端安装&#xff0c;运行网上提供的指令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)&quo…...

VSCODE 在新窗口中打开

使用VS习惯了&#xff0c;经常在新窗口中打开查看 但是VSCODE&#xff0c;无法拖动标签到一个新窗口中&#xff0c;一直以为没这个功能 后来发现 使用快捷健 ctlk,o 可以将标签页在新窗口中打开&#xff0c;虽然不如vsstudio方便&#xff0c;不过也可实现在新窗口打开的功能…...

Python与设计模式--解释器模式

23种计模式之 前言 &#xff08;5&#xff09;单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、&#xff08;11&#xff09;策略模式、责任链模式、命令模式、中介者模…...

单电阻采样 基于单电阻采样的相电流重构算法 keil完整工程。 单电阻采样 f103的单电阻...

单电阻采样 基于单电阻采样的相电流重构算法 keil完整工程。 单电阻采样 f103的单电阻&#xff0c;完整工程&#xff0c;带文档&#xff0c;带硬件资料。 f3平台的单电阻完整工程&#xff0c;代码详细注释。 还有微芯的单电阻smo代码加文档 具体如截图请看下一、工程概述 本工程…...

手把手教你用Python的basemap标注旅行足迹(含常见安装问题解决)

用Python绘制个性化旅行地图&#xff1a;从安装到创意标记全指南 每次翻开相册&#xff0c;那些泛黄的机票和模糊的景点门票总让我想起走过的路。但有没有更科技感的方式记录旅行足迹&#xff1f;今天我们就用Python的basemap工具&#xff0c;把你的旅行故事变成一幅交互式世界…...

6、深入解析transforms.RandomAffine():参数详解与实战应用

1. 什么是RandomAffine变换&#xff1f; RandomAffine是PyTorch中torchvision.transforms模块提供的一个非常实用的图像增强方法。简单来说&#xff0c;它能够对图像进行一系列随机的仿射变换操作。你可能要问&#xff1a;什么是仿射变换&#xff1f;其实它就是我们日常生活中常…...

Swagger Client 性能优化:10个技巧让你的 API 调用快如闪电

Swagger Client 性能优化&#xff1a;10个技巧让你的 API 调用快如闪电 【免费下载链接】swagger-js Javascript library to connect to swagger-enabled APIs via browser or nodejs 项目地址: https://gitcode.com/gh_mirrors/sw/swagger-js Swagger Client 是一款强大…...

系统安全组件管理工具:Windows环境下安全服务的精细化控制方案

系统安全组件管理工具&#xff1a;Windows环境下安全服务的精细化控制方案 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mir…...

终极暗黑破坏神2存档编辑器:免费开源的d2s文件修改完整指南

终极暗黑破坏神2存档编辑器&#xff1a;免费开源的d2s文件修改完整指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾经因为暗黑破坏神2中的角色培养方向错误而感到沮丧&#xff1f;或者因为装备获取过于依赖运气而想…...

TTS-Vue终极指南:如何快速构建高性能本地语音合成应用

TTS-Vue终极指南&#xff1a;如何快速构建高性能本地语音合成应用 【免费下载链接】tts-vue &#x1f3a4; 微软语音合成工具&#xff0c;使用 Electron Vue ElementPlus Vite 构建。 项目地址: https://gitcode.com/gh_mirrors/tt/tts-vue 在数据安全和网络稳定性成…...

Debian13安装基于apt的Nvidia闭源驱动+CUDA开发环境

Ubuntu安装NVIDIA驱动实在太容易了&#xff0c;直接在额外驱动里面选择就好&#xff0c;但Debian没有这么简单。以往我们都需要从NVIDIA官网下载.run文件&#xff0c;但现在其实更建议各位使用Nvidia提供的本地apt源来管理。本文只针对apt版本驱动安装过程中特定的坑和CUDA开发…...

Phi-3-vision-128k-instruct Ollama国内镜像源加速部署与多模型管理

Phi-3-vision-128k-instruct Ollama国内镜像源加速部署与多模型管理 1. 为什么需要国内镜像源 如果你在国内尝试使用Ollama拉取Phi-3-vision这样的大型模型&#xff0c;可能会遇到下载速度慢甚至失败的问题。这是因为默认的模型仓库位于海外服务器&#xff0c;网络连接不稳定…...

translategemma-12b-it在C++高性能计算环境中的集成

translategemma-12b-it在C高性能计算环境中的集成 1. 引言 在当今全球化的技术环境中&#xff0c;多语言翻译能力已经成为许多应用程序的核心需求。translategemma-12b-it作为Google基于Gemma 3架构开发的专门翻译模型&#xff0c;支持55种语言的高质量互译&#xff0c;为开发…...