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];

posted @ 2016-03-17 17:13  秋棠枫眠  阅读(2620)  评论(0编辑  收藏