夏令時 DST (Daylight Saving Time) java中的夏令時【轉】


1916年,德國首先實行夏令時,英國因為怕德國會從中得到更大的效益,因此緊跟着也采取了夏令時

 

1986年至1991年,中華人民共和國在全國范圍實行了六年夏令時

 

サマータイム 夏時間(日本現在沒有實行夏令時,但是在美國駐軍的1948年〜1951年使用了夏令時)

 

一下內容來源:http://blog.csdn.net/java2000_net/article/details/4362316

==========================================================================================

 

內容來自論壇的文章:http://topic.csdn.net/u/20090711/01/82c73f46-20ac-4a95-977d-f3f077ce822a.html

如下的java代碼

 

[java] view plaincopy
 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");  
String sTime = "1991-04-07 00:00:00";  
Date time = sdf.parse(sTime);  
Calendar cd = Calendar.getInstance();  
cd.setTime(time);  
cd.add(Calendar.DATE, 7);  
time = cd.getTime();  
System.out.println(sdf.format(time));  

  

在運行后,沒有得到預期的

1991-04-14 00:00:00

而是

1991-04-14 01:00:00

憑空多出來了1小時

 

根據火龍果的研究成果,這個是夏令時哦,使用 Calendar.DST_OFFSET 可以獲得偏移量。

夏令時是通過 TimeZone 的子類 sun.util.calendar.ZoneInfo 實現的。 

ZoneInfo 中的數據存放於 %JRE_HOME%/lib/zi 目錄中。 (注意,是在jre的目錄下)

我們機器一般采用的時區名稱為 Asia/Shanghai,相對應的時區信息文件位於: 

%JRE_HOME%/lib/zi/Asia/Shanghai 中,這是一個二進制文件。 

通過 sun.util.calendar.ZoneInfoFile 的解析,可以獲得需要采用夏令時的時間為: 

 

  1940-06-03 01:00:00 ~ 1940-09-30 23:00:00
  1941-03-16 01:00:00 ~ 1941-09-30 23:00:00
  1986-05-04 01:00:00 ~ 1986-09-13 23:00:00
  1987-04-12 01:00:00 ~ 1987-09-12 23:00:00
  1988-04-10 01:00:00 ~ 1988-09-10 23:00:00
  1989-04-16 01:00:00 ~ 1989-09-16 23:00:00
  1990-04-15 01:00:00 ~ 1990-09-15 23:00:00
  1991-04-14 01:00:00 ~ 1991-09-14 23:00:00

 

前段表示那一天開始的時間,也就是說那一天的 0 點在該時區中是不存在。 

后段表示那一天結束的時間,這個時間計算很復雜: 

如果當前時間為:1986-09-13 23:00:00,增加 1 小時后為 1986-09-14 00:00:00 
如果當前時間為:1986-09-13 22:00:00,增加 2 小時后為 1986-09-13 23:00:00,因為 1986-09-13 23:00:00 是夏令時結束時間,時鍾需要回撥。

由於每個時區的夏令時都不一樣,編程語言中的夏令時算法非常復雜。 

============================================================================================

 

擴展 : GMT

 

格林威治標准時間GMT

 轉:http://blog.csdn.net/sxzlc/article/details/7281603


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM