漫步IOS--日期类及其函数

OC里的日期函数是NSDate和Java差不多。

常用函数

1 初始化

NSDate *da = [NSDate dateWithTimeIntervalSinceNow:0];
根据系统时间初始化得到一个NSDate。这里需要提一句。在IOS系统内部,对于NSDate的存储都是按照零时区的时间存储的。怎么说呢?假设现在的系统的时间是晚上八点,我们是处在东五区的,那么现在我们输出这个da实例的时间值应该是(20-8),即显示的时间是中午十二点。这是系统规定,但是看起来怪别扭的,所以可以后面0的位置加上8个小时,这样显示的就是现在我们这个时区的时间。这个参数的单位是秒,所以,代码就是这样的。
NSDate *da = [NSDate dateWithTimeIntervalSinceNow:8*60*60];


2 添加时间

da = [da dateByAddingTimeInterval:5 * 60];
参数的单位是以秒为单位的。


3 获得两个NSDate的时间差

NSTimeInterval nt = [da timeIntervalSinceNow];
NSLog(@"%f", nt / 60 / 60);
获得对象和当前系统时间的,返回的值也是以秒为单位的。
NSTimeInterval  nt1 = [da timeIntervalSinceDate:da1];
NSLog(@"%f",nt1 / 60 / 60);
获得对象和da1之间的时间差,以秒为单位

4  判断两个NSDate是否相同

BOOL b1 = [da isEqualToDate:da1];


日期格式转换类NSDateFormatter

与Java极其的相似,OC系统原生的日期类展现的形式非常的难看。OC也提供了格式转换类。

1 初始化

NSDate *nd = [NSDate date];
NSDateFormatter *df1 = [[NSDateFormatter alloc] init];

2 设置格式

[df1 setDateFormat:@"yyyy年MM月dd日 HH时mm分ss秒"];
注意月份的占位符是MM,而分钟的占位符是mm,还有!!小时的占位符是HH。


3 日期和字符串之间的转换

NSString *str1 = [df1 stringFromDate:nd];
NSLog(@"%@", str1);
NSString *timer = @"2015年11月3日 12时24分6秒";
NSLog(@"%@", [df1 dateFromString:timer]);
这里得提一句,在OC中的日期类是比较脆弱的,不,是很脆弱的,但凡一点错误就会导致最后的结果是个空。例如:格式化字符串的占位符错了,字符串和格式化的字符串不匹配,年月日时分秒的数字大于实际可能值,如秒数写60。还有,OC中的NSDate是通过存储1970年至现在的秒数来确定时间的,所以如果时间的年份写在1970年以前,也是不会获得正确的时间值得。


最最重要的一点:是NSDateFormatter这个类,他在转换的时候会自动进行时间加减。就是说,一个NSDate类型的转成字符串的时候,因为存储的时候存的是零时区,在转换的时候会自动加上现在的东八时区的时差,得到的就是东八的时间。同理,再从字符串转换为NSDate的时候,依旧是减去东八的时差,在电脑存储的还是零时区的时间。

但是这就带来一个问题。如果我们想把一个字符串转换成Date获得时间并显示,发现时间总是和我们的时区差8个小时,就是因为在转换的时候被自动减掉了8个小时。这就需要我们加上8个小时。就想上面代码的第三四行,输出的时候就会看到了。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值