您的位置:首页 > 移动开发 > IOS开发

ios 日期转换 时区问题

2016-11-08 00:00 435 查看
摘要: 时区问题

首先需要认识几个概念
1、NSDate:官方描述的是
NSDate
objects encapsulate a single point in time, independent of any particular calendrical system or time zone. Date objects are immutable, representing an invariant time interval relative to an absolute reference date
翻译: NSDate对象封装一个时间点,独立于任何特定的历法的系统或时区。日期对象是不可变的,代表一个不变的时间间隔相对于绝对引用日期
所以要明白,NSDate存放的是一个UTC时间点,和时区啊,地点啊都没有关系,而我们所说的时区是为了人们统一标准,对时间的一个修饰,是一个理念的东西,不要误认为时区是时间的一部分,时区上只不过是约束了变现形式,实际上不管将时区设置多少,某一时间点距离1970年那个时间点是不变的。
所以NSDate打印出来永远是基于0时区的,和我们看到的相差8小时

2、理解了上面开始进入正式话题-转换
a、NSDate 转 NSString



打印出来差了八小时,是因为NSDate存放的是UTC标准时间,而且你也无法改变NSDate存放的形式
使用NSDateFormatter来格式化输出



NSDateFormatter创建后默认设置是和系统一样的,所以转换后格式正确

b、NSString 转 NSDate



打印结果相差八小时,不要认为错了,其实是它将你的时间按照本地时区转化为标准时间存入了NSDate对象中
,没看到后面有+0000 而不是+0800吗。
但是我们有时候就是想要NSDate打印出来是我们的东八区该怎么办呢,如下:



设置:[formate setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:8]];
相当于逻辑上把我们东八区当做了标准时间使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios日期转换 时区