程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> java日期時間問題-為何指定時間加上1小時,個別會出錯?

java日期時間問題-為何指定時間加上1小時,個別會出錯?

編輯:編程綜合問答
為何指定時間加上1小時,個別會出錯?

為了說明問題,請看下面一小段代碼
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Cs {
public static void main(String[] args) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date d = format.parse("1986-09-13 21:00:00");
Calendar c = Calendar.getInstance();
for(int i=0;i<5;i++){
c.setTime(d);
c.add(Calendar.HOUR_OF_DAY, 1);
Timestamp ts = new Timestamp(c.getTimeInMillis());
d=ts;
System.out.println(ts);
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

運行結果為
1986-09-13 22:00:00.0

1986-09-13 23:00:00.0

1986-09-13 23:00:00.0

1986-09-14 00:00:00.0
1986-09-14 01:00:00.0

為何第一次 1986-09-13 23:00:00.0沒有變化
謝謝!

最佳回答:


先說解決辦法吧,使用SimpleDateFormat的時候要加上時區,比如你的代碼加上這一句就沒有問題了:

format.setTimeZone(TimeZone.getTimeZone("GMT+8"));

再說原因:
你挑的這個時間跟夏令時有關,你可以看下這裡關於中國實行夏令時的日期說明:
http://www.qingyunju.com/name/xiashizhi.htm

你的時間正好是夏令時與正常時間切換的點,上面的鏈接中說我國是從凌晨2時開始算,但貌似java中直接按日期算了,沒有精確到時,你可以試試其他幾個實行夏令時的年份。
具體的源代碼我還沒有找到。有了我再告訴你。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved