NSTimeZone时区是一个地理名字,是为了克服各个地区或国家之间在使用时间上的混乱。
基本概念:
GMT 0:00 格林威治标准时间; UTC +00:00 校准的全球时间; CCD +08:00 中国标准时间
夏时制,英文"DaylightSavingTime"。夏季时将时区内的时间提前(一般为1小时),以节省资源,提高效率。使用夏时制期间,当前时区相对于GMT的时间偏移量会发生变化。在某些应用中可能需要考虑。
任何时区都以GMT为基准,即,任何NSTimeZone对象所代表的时区都是相对于GMT的,这里的相对性是NSTimeZone中最重要的属性,我们称之为当前时区相对于GMT的偏移量。一旦知道了一个偏移量,便可以确定一个时区。在iOS中,偏移量是以"秒"为单位的。
NSTimeZone是一个类簇,我们所使用的任何NSTimeZone对象都是NSTimeZone的私有子类。
iOS系统中的/usr/share/zoneinfo/目录中保存了所有的可根据 地理位置名称 或 时区别名 得到的时区信息。时区别名都是与具体的地理位置一一对应的。(已越狱的童鞋请看)
iOS中的时区表示方法:GMT+0800 GMT-0800。(+:东区 -:西区 08:小时数 00:分钟数)。 GMT+0830就是指比GMT早8小时外加30分钟的时区。
以上摘自:https://segmentfault.com/a/1190000005048962
具体详情:
// name由knownTimeZoneNames获取
NSTimeZone *zone1 = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];
// abbreviation由abbreviationDictionary获取
NSTimeZone *zone2 = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
// GMT作参考
NSTimeZone *zone3 = [NSTimeZone timeZoneForSecondsFromGMT:8*60*60];
// zone距date时长
NSInteger cc1 = [zone1 secondsFromGMTForDate:[NSDate date]];
/*
systemTimeZone:系统时区
defaultTimeZone:默认时区(可以被修改)
resetSystemTimeZone:重置手机系统时区
localTimeZone:本地时区
secondsFromGMT:距GMT时长
*/
// 只能够修改该程序的defaultTimeZone,不能修改系统的,更不能修改其他程序的。
[NSTimeZone setDefaultTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT+0900"]];
在abbreviationDictionary添加中国标准时间名称缩写
NSMutableDictionary *abbs = [[NSMutableDictionary alloc] init];
[abbs setValuesForKeysWithDictionary:[NSTimeZone abbreviationDictionary]];
[abbs setValue:@"Asia/Beijing" forKey:@"BJT"];
[NSTimeZone setAbbreviationDictionary:abbs];