iOS NSDate等时间类的使用
一、NSDate
- NSDate对象用来表示一个具体的时间点。
- NSDate是一个类簇,我们所使用的NSDate对象,都是NSDate的私有子类的实体。
- NSDate存储的是GMT时间,使用的时候会根据 当前应用 指定的 时区 进行时间上的增减,以供计算或显示。
//iOS时间
//当前时间、默认0时区
NSDate *date = [NSDate date];
NSLog(@"当前时间date%@",date); //NSDateFormatter是用来设置NSDate的格式
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
//设置为系统时区
formatter.timeZone = [NSTimeZone systemTimeZone];
//用来设置NSDate的输出格式
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; //用来讲本地时间转换成字符串的形式输出
NSString *timeStr = [formatter stringFromDate:[NSDate date]];
NSLog(@"本地时间 NSDate的输出格式 %@",timeStr);
除此之外,日期之间比较可用以下方法:
//与otherDate比较,相同返回YES
- (BOOL)isEqualToDate:(NSDate *)otherDate; //与anotherDate比较,返回较早的那个日期
- (NSDate *)earlierDate:(NSDate *)anotherDate; //与anotherDate比较,返回较晚的那个日期
- (NSDate *)laterDate:(NSDate *)anotherDate;
二、NSDateFormatter
//将字符串转换为日期对象.
NSString *dateStrs = @"2020-01-01-18:10:00";
NSDateFormatter *formatterTime = [NSDateFormatter new];
formatterTime.dateFormat = @"yyyy-MM-dd-HH:mm:ss";
formatterTime.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSDate *dateTime = [formatterTime dateFromString:dateStrs];
NSLog(@"将字符串转换为日期对象date %@",dateTime);
将时间字符串转换到NSDate对象,一般都是使用"年月日 时分秒",数据库中的date类型基本上也是这样的时间类型。 格式一般为:yyyy-MM-dd HH:mm:ss。
注意:yyyy是小写的;大写的YYYY的意思有些不同——“将这一年中第一周的周日当作今年的第一天”,因此有时结果和yyyy相同,有时就会不同。
将NSDate对象转换成特定格式的字符串。
转换后的字符串会根据设备的“区域格式”,显示特定语言的结果。假如程序需要保证不同语言环境下显示一致,请注意这方面的问题,使用其他代替方法!
NSDateFormatter 格式化参数如下:
G: 公元时代,例如AD公元
yy: 年的后2位
yyyy: 完整年
MM: 月,显示为1-
MMM: 月,显示为英文月份简写,如 Jan
MMMM: 月,显示为英文月份全称,如 Janualy
dd: 日,2位数表示,如02
d: 日,-2位显示,如
EEE: 简写星期几,如Sun
EEEE: 全写星期几,如Sunday
aa: 上下午,AM/PM
H: 时,24小时制,-
K:时,12小时制,-
m: 分,-2位
mm: 分,2位
s: 秒,-2位
ss: 秒,2位 S: 毫秒 常用日期结构:
yyyy-MM-dd HH:mm:ss.SSS
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
MM dd yyyy
三、NSDate和时间戳的相互转换
// NSDate 转换成时间戳
NSString *timeSp = [NSString stringWithFormat:@"%ld",(long)[[NSDate date] timeIntervalSince1970]]; NSLog(@"timeSp : %@", timeSp); // 时间戳转换成NSDate
NSDate *currentTime = [NSDate dateWithTimeIntervalSince1970:[timeSp intValue]]; NSLog(@"currentTime : %@", currentTime);
四、NSCalendar
- NSCalendar对世界上现存的常用的历法进行了封装,既提供了不同历法的时间信息,又支持日历的计算。
- NSDateComponents将时间表示成适合人类阅读和使用的方式,通过NSDateComponents可以快速而简单地获取某个时间点对应的“年”,“月”,“日”,“时”,“分”,“秒”,“周”等信息。当然一旦涉及了年月日时分秒就要和某个历法绑定,因此NSDateComponents必须和NSCalendar一起使用,默认为公历。
- NSDateComponents返回的day, week, weekday, month, year这一类数据都是从1开始的。因为日历是给人看的,不是给计算机看的,从0开始就是个错误。
//取到NSDate对象的各个部分 年 月 日 周
//1. 创建1个当前的日历对象.
// 作用: 可以取到1个日期对象的各个部分.
NSCalendar *calendar = [NSCalendar currentCalendar];
//2. 指定日历对象,要去取日期对象的那些部分.
NSDateComponents *comp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekday fromDate:date]; //3. 通过NSDateComponents取到指定的日期的各个部分.
NSLog(@"%lu",comp.year);
NSLog(@"%lu",comp.month);
NSLog(@"%lu",comp.day);
NSLog(@"%lu",comp.weekday);
iOS NSDate等时间类的使用的更多相关文章
- iOS--时间类date详解
NSDate定义时间的类 NSDate是一个时间类,在编写程序时,我们很少遇到.今天我突然碰到,感觉很生疏. 给大家发个博客,让大家也都温习一下,哈哈! 兄弟用的时候突然发现竟然有一些bug,大家用时 ...
- NSDate时间类/NSDateFormatter日期格式类
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { // NSDate 时间类 继承自N ...
- 关于iOS中的时间
两类 绝对时间 [NSDate date].CFAbsoluteTimeGetCurrent(),或者gettimeofday(). 返回的是从某一个时刻开始,度过的秒数.会随着用户设置的系统时间更改 ...
- iOS开发之时间格式的转化
在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理. 例如:如何将格式为“12-May-14 05.08.02.000000 PM” ...
- ios开发之--时间格式化
字符串转时间 iOS 中 NSDate 是时间管理类,这里获取到的时间是 UTC 时间,可以根据需要转换成任意地区的时间. NSFormatter 类是时间格式化类,可以根据指定的格式.地区将指定的时 ...
- iOS中处理时间的类
登录|注册 sakulafly的专栏 目录视图 摘要视图 订阅 Markdown博文大赛清新开启 天天爱答题 一大波C币袭来 中国云计算大会演讲议题公布 大 ...
- IOS NSDate NSDateFormatter 导致相差8小时
时间问题应该是所有编程语言都要处理的.详细学过php的同学知道,php中也会有相差8小时的问题,然而php可以非常方便的解决的,直接设置下就好了 我最近在学习IOS的过程中,发现IOS的日期处理也是个 ...
- iOS 获取当前时间格式化字符串
iOS 获取当前时间格式化字符串 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保 ...
- Java中六大时间类的使用和区别
关于java中六个时间类的使用和区别 java.util.Date java.sql.Date java.sql.Time java.sql.Timestamp java.text.SimpleD ...
随机推荐
- #26 fibonacci seqs
Difficulty: Easy Topic: Fibonacci seqs Write a function which returns the first X fibonacci numbers. ...
- 换个角度看微信小程序[推荐]
去年参加几次技术沙龙时,我注意到一个有意思的现象:与之前大家统一接受的换名片不同,有些人并不愿意被添加微信好友--"不好意思,不熟的人不加微信". 这个现象之所以有意思,是因为名片 ...
- 警惕!高版本VS发布时预编译导致Mono中Razor找不到视图
早前一段时间,一位朋友在Q群里面找到我,说它按照<Linux.NET学习手记>的操作,把一个ASP.NET MVC 4.0的项目部署到Mono之后出现Razor无法找到视图的现象.当时费了 ...
- asp.net中ashx生成验证码代码放在Linux(centos)主机上访问时无法显示问题
最近有个项目加入了验证码功能,就从自己博客以前的代码中找到直接使用,直接访问验证码页面报错如下: 源代码:asp.net中使用一般处理程序生成验证码 Application Exception Sys ...
- windows10简单试用(多图,连薛定谔的猫都杀死了)
为了大家看起来方便,我的截图都是gif的,比较小,但是颜色会有色差,相信大家不介意的 昨天windows10可以下载第一时间就下了玩玩 由于是技术预览,所以不打算替换之前的系统,只装在虚拟机里玩玩就好 ...
- 在ASP.NET MVC5中实现具有服务器端过滤、排序和分页的GridView
背景 在前一篇文章<[初学者指南]在ASP.NET MVC 5中创建GridView>中,我们学习了如何在 ASP.NET MVC 中实现 GridView,类似于 ASP.NET web ...
- ABP源码分析二十九:ABP.MongoDb
这个Module通过建立一个MongoDbRepositoryBase<TEntity> 基类,封装了对MongoDb数据库的操作. 这个module通过引用MongoDB.Driver, ...
- 开发node桌面级应用工具:apk转化epub
随着苹果ibooks对国内的开放,最近接了个麻烦的需求: 把现有的APK转化支持苹果ibooks电子书的epub格式 apk,基本都知道就是安卓的应用程序 epub,是ibooks支持的电子书格式 ( ...
- python实现网络爬虫下载天涯论坛帖子
最近发现天涯论坛是一个挺有意思的网站,有各种乱七八糟的帖子足以填补无聊时候的空虚感,但是相当不爽的一件事就是天涯的分页模式下想连贯的把楼主的内容看完实在是太心酸了,一个999页的帖子,百分之九十都是无 ...
- Android开发之自定义的ListView(UITableViewController)
Android开发中的ListView, 顾名方法思义,就是表视图.表示图在iOS开发中就是TableView.两者虽然名称不一样,但是其使用方法,使用场景以及该控件的功能都极为相似,都是用来展示大量 ...