java 夏令时_Java里面的夏令时
內(nèi)容來(lái)自論壇的文章:http://topic.csdn.net/u/20090711/01/82c73f46-20ac-4a95-977d-f3f077ce822a.html
如下的java代碼
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));
在運(yùn)行后,沒(méi)有得到預(yù)期的
1991-04-14 00:00:00
而是
1991-04-14 01:00:00
憑空多出來(lái)了1小時(shí)
根據(jù)火龍果的研究成果,這個(gè)是夏令時(shí)哦,使用 Calendar.DST_OFFSET 可以獲得偏移量。
夏令時(shí)是通過(guò) TimeZone 的子類(lèi) sun.util.calendar.ZoneInfo 實(shí)現(xiàn)的。
ZoneInfo 中的數(shù)據(jù)存放于 %JRE_HOME%/lib/zi 目錄中。
我們機(jī)器一般采用的時(shí)區(qū)名稱(chēng)為 Asia/Shanghai,相對(duì)應(yīng)的時(shí)區(qū)信息文件位于:
%JRE_HOME%/lib/zi/Asia/Shanghai 中,這是一個(gè)二進(jìn)制文件。
通過(guò) sun.util.calendar.ZoneInfoFile 的解析,可以獲得需要采用夏令時(shí)的時(shí)間為:
Java code
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
前段表示那一天開(kāi)始的時(shí)間,也就是說(shuō)那一天的 0 點(diǎn)在該時(shí)區(qū)中是不存在。
后段表示那一天結(jié)束的時(shí)間,這個(gè)時(shí)間計(jì)算很復(fù)雜:
如果當(dāng)前時(shí)間為:1986-09-13 23:00:00,增加 1 小時(shí)后為 1986-09-14 00:00:00
如果當(dāng)前時(shí)間為:1986-09-13 22:00:00,增加 2 小時(shí)后為 1986-09-13 23:00:00,因?yàn)?1986-09-13 23:00:00 是夏令時(shí)結(jié)束時(shí)間,時(shí)鐘需要回?fù)堋?/p>
由于每個(gè)時(shí)區(qū)的夏令時(shí)都不一樣,編程語(yǔ)言中的夏令時(shí)算法非常復(fù)雜。
幸好中國(guó)從 1992 年開(kāi)始停止使用夏令時(shí)。
這里是夏令時(shí)時(shí)區(qū)數(shù)據(jù)頁(yè)面:http://www.twinsun.com/tz/tz-link.htm
這里可以找到各時(shí)區(qū)最新的夏令時(shí)數(shù)據(jù):ftp://elsie.nci.nih.gov/pub/
總結(jié)
以上是生活随笔為你收集整理的java 夏令时_Java里面的夏令时的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux18安装anyconnect4
- 下一篇: java美元兑换,(Java实现) 美元