iOS 时区问题总结 NSTimeZone
基本概念
- GMT 0:00 格林威治标准时间; UTC +00:00 校准的全球时间; CCD +08:00 中国标准时间 [来自百度百科]
- 夏时制,英文"DaylightSavingTime"。夏季时将时区内的时间提前(一般为1小时),以节省资源,提高效率。使用夏时制期间,当前时区相对于GMT的时间偏移量会发生变化。在某些应用中可能需要考虑。
- 任何时区都以GMT为基准,即,任何NSTimeZone对象所代表的时区都是相对于GMT的,这里的相对性是NSTimeZone中最重要的属性,我们称之为当前时区相对于GMT的偏移量。一旦知道了一个偏移量,便可以确定一个时区。在iOS中,偏移量是以"秒"为单位的。
- NSTimeZone是一个类簇,我们所使用的任何NSTimeZone对象都是NSTimeZone的私有子类。
- iOS中的时间类NSDate中存储的时间,都是相对于GMT的,我们使用NSDate时,会根据App的时区设置返回与时区对应的数据。
- iOS系统中的/usr/share/zoneinfo/目录中保存了所有的可根据 地理位置名称 或 时区别名 得到的时区信息。时区别名都是与具体的地理位置一一对应的。(已越狱的童鞋请看)
- iOS中的时区表示方法:GMT+0800 GMT-0800。(+:东区 -:西区 08:小时数 00:分钟数)。 GMT+0830就是指比GMT早8小时外加30分钟的时区。
//根据name得到对应时区
NSTimeZone *timezone = [[NSTimeZone alloc] initWithName:@"Africa/Abidjan"];
//根据时间偏移量(秒)得到时区
NSTimeZone *timezone = [NSTimeZone timeZoneForSecondsFromGMT:@"+8"*60*60];
------------------------------------------------转换时区方法------------------------------------------------
//根据当前的时区 得到对应的时间 timezone为你已经知道的时区
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
//设定时间格式
[formatter setDateFormat:@"YYYY-MM-dd HH:mm"];
[formatter setTimeZone:timezone];
//当前时间为stringTime
NSString *stringTime = @"2015-03-04 11:23";
NSDate *myDate = [formatter dateFromString:stringTime];
//根据想要得到的时区的时区 得到该时区的时间
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:@"+12"*60*60]];
//根据当前的时间myDate 得到 对方时区的时间
NSString *dateTime = [formatter stringFromDate:myDate];