GMT、UTC和DST

转载自:http://blog.csdn.net/hudashi/article/details/7069600

GMT就是格林尼治标准时间,它是Greenwich mean time的简称。
UTC则是协调世界时间,它是coordinated universal time的时间。它是一种更精确的GMT。
GMT和全球24个时区的划分 
GMT和UTC - hubingforever - 民主与科学
GMT和UTC - hubingforever - 民主与科学
 
       相较于GMT和UTC,显示世界各时区时间和地名的世界时区表(World Time),就显得精密与复杂多了,通常世界时区表的表盘上会标示着全球24个时区的城市名称,但究竟这24个时区是如何产生的?过去世界各地原本各自订定当地时间,但随着交通和电讯的发达,各地交流日益频繁,不同的地方时间,造成许多困扰, 于是在西元1884年的国际会议上制定了全球性的标准时间,明确定以英国伦敦格林威治这个地方为零度经线的起点(亦称为本初子午线),并以地球由西向东每24小时自转一周360°,规定每隔经度15°,时差1小时,将全球划分为24个时区,其中包含23个整时区及180°经线左右两侧的2个半时区。对于时区正中央的经线,我们称之谓中央经线
      西经7.5°到东经7.5°称为 GMT 标准时区或 GMT0 时区,中央经线为正经0°。西经7.5°到西经22.5°称为 GMT-1 时区,中央经线为西经15°;西经22.5°到西经37.5°称为 GMT-2 时区,中央经线为西经30°;西经37.5°到西经52.5°称为 GMT-3 时区,中央经线为西经45°;西经52.5°到西经67.5°称为 GMT-4 时区,中央经线为西经60°;西经67.5°到西经82.5°称为 GMT-5 时区,中央经线为西经75°;西经82.5°到西经97.5°称为 GMT-6 时区,中央经线为西经90°;西经97.5°到西经112.5°称为 GMT-7 时区,中央经线为西经105°;西经112.5°到西经127.5°称为 GMT-8 时区,中央经线为西经120°;西经127.5°到西经142.5°称为 GMT-9 时区,中央经线为西经135°;西经142.5°到西经157.5°称为 GMT-10 时区,中央经线为西经150°;西经157.5°到西经172.5°称为 GMT-11 时区,中央经线为西经165°。东经7.5°到东经22.5°称为 GMT+1 时区,中央经线为东经15°;东经22.5°到东经37.5°称为 GMT+2 时区,中央经线为东经30°;东经37.5°到东经52.5°称为 GMT+3 时区,中央经线为东经45°;东经52.5°到东经67.5°称为 GMT+4 时区,中央经线为东经60°;东经67.5°到东经82.5°称为 GMT+5 时区,中央经线为东经5°;东经82.5°到东经97.5°称为 GMT+6 时区,中央经线为东经90°;东经97.5°到东经112.5°称为 GMT+7 时区,中央经线为东经105°;东经112.5°到东经127.5°称为 GMT+8 时区,中央经线为东经120°;东经127.5°到东经142.5°称为 GMT+9 时区,中央经线为东经135°;东经142.5°到东经157.5°称为 GMT+10 时区,中央经线为东经150°;东经157.5°到东经172.5°称为 GMT+11 时区,中央经线为东经165°。东经165到正经180和西经165到正经180称为 GMT+12 ,中央经线为正经180°
     就全球的时间来看,东经的时间比西经要早,也就是如果格林威治时间(GMT/GMT0)是中午12时,则GMT+1的时区为下午1时,GMT+2时区的时间为下午2时;反之,GMT-1的时区时间为上午11时,GMT-2时区的时间为上午10时。以台湾为例,台湾位于东经121°,它为GMT+8时区,换算后与格林威治就有8小时的时差。 正经180° 被定为 国际换日线 ,由西向东通过此线时日期要减去一日,反之,若由东向西则要增加一日。
        如果手表上表示有GMT,则代表此表具有两个时区的时间的功能,也就是同时可以显示当地时区时间和另一个时区的时间。
世界协调时间UTC
       有些表上看不到GMT字样,出现的反而是UTC这3个英文字母,究竟何谓UTC?在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为 通用协调时间UTC( Universal Time Coordinated), UTC 称世界标准时间、世界统一时间。 UTC 是更精确的GMT/GMT0时间 。它是经过平均太阳时(以格林威治标准时间 GMT/GMT0 为准)、地轴运动修正后的新时标以及以「秒」为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密,因此若以「世界标准时间」的角度来说, UTC 比GMT来得更加精准。其误差值必须保持在0.9秒以内,若大于0.9秒则由位于巴黎的国际地球自转事务中央局发布闰秒,使UTC与地球自转周期一致。所以基本上UTC的本质强调的是比GMT更为精确的世界时间标准. 它其实是个更精确的GMT/GMT0.
夏日节约时间DST
       所谓「夏日节约时间」Daylight Saving Time(简称D.S.T.),是指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用,在英国则称为夏令时间(Summer Time)。这个构想于1784年由美国班杰明·富兰克林提出来,1915年德国成为第一个正式实施夏令日光节约时间的国家,以削减灯光照明和耗电开支。自此以后,全球以欧洲和北美为主的约70个国家都引用这个做法。目前被划分成两个时区的印度也正在商讨是否全国该统一实行夏令日光节约时间。欧洲手机上也有很多GSM系统的基地台,除了会传送当地时间外也包括夏令日光节约时间,做为手机的时间标准,使用者可以自行决定要开启或关闭。值得注意的是,某些国家有实施「夏日节约时间」的制度,出国时别忘了跟随当地习惯在表上调整一下,这可是机械表没有的功能设计哦!

获取以GMT形式的时区

Android手机中如果想以GMT形式(GMT+08:00)得到当前时区,可以参照如下代码所示:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public static String getCurrentTimeZone()  
  2. {  
  3.     TimeZone tz = TimeZone.getDefault();  
  4.     return createGmtOffsetString(true,true,tz.getRawOffset());  
  5. }  
  6. public static String createGmtOffsetString(boolean includeGmt,  
  7.                                            boolean includeMinuteSeparator, int offsetMillis) {  
  8.     int offsetMinutes = offsetMillis / 60000;  
  9.     char sign = '+';  
  10.     if (offsetMinutes < 0) {  
  11.         sign = '-';  
  12.         offsetMinutes = -offsetMinutes;  
  13.     }  
  14.     StringBuilder builder = new StringBuilder(9);  
  15.     if (includeGmt) {  
  16.         builder.append("GMT");  
  17.     }  
  18.     builder.append(sign);  
  19.     appendNumber(builder, 2, offsetMinutes / 60);  
  20.     if (includeMinuteSeparator) {  
  21.         builder.append(':');  
  22.     }  
  23.     appendNumber(builder, 2, offsetMinutes % 60);  
  24.     return builder.toString();  
  25. }  
  26.   
  27. private static void appendNumber(StringBuilder builder, int count, int value) {  
  28.     String string = Integer.toString(value);  
  29.     for (int i = 0; i < count - string.length(); i++) {  
  30.         builder.append('0');  
  31.     }  
  32.     builder.append(string);  
  33. }  

//直接获取其时区值的操作,直接标识东八区(+8)或者西七区(-7)
Calendar cal = Calendar.getInstance(Locale.getDefault()); 
int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET); 
int zone=zoneOffset/60/60/1000;//时区,东时区数字为正,西时区为负 

猜你喜欢

转载自blog.csdn.net/xiaohui2015/article/details/70057472