簡體   English   中英

Java中的日歷更改時區時返回相同的日期?

[英]Calender in java returning the same date when changing the time zone?

我正在做一個必須操縱日期的項目。 這是我擁有的代碼片段,我的時區是IST,轉換時區是CST。

public class Sample {
public static Long time = 1418187600l;
public static TimeZone tz1 = TimeZone.getTimeZone("US/Central");


public static void main(String[] args) {
    Calendar c1 = Calendar.getInstance();
    System.out.println(c1.getTime()); // output1 
    c1.setTimeInMillis(time*1000);
    System.out.println(c1.getTime());//output 2
    System.out.println(c1.get(Calendar.DATE));
    c1.setTimeZone(tz1);;
    System.out.println(c1.getTime()); //output 3
    System.out.println(c1.get(Calendar.DATE));
}

}

當我運行程序時,我得到了

Wed Dec 10 13:03:42 IST 2014

對於正確的行。

然后將時間設置為1418187600,此輸出也正確。

Wed Dec 10 10:30:00 IST 2014

但是,當將時區設置為CST並嘗試輸出日期時,它返回了相同的結果

Wed Dec 10 10:30:00 IST 2014

雖然它應該已經返回Dec 09 2014 23:00:00

但是,當我嘗試Calendar.data時,它顯示了正確的日期。 誰能向我解釋為什么會這樣?

您正在打印java.util.Date (調用getTime()的結果)。 Date根本不包含時區信息Date.toString() 始終在默認時區中顯示該Date表示的時間點。

基本上,您應該避免調用Date.toString() -這是造成大量混亂的原因。 請改用SimpleDateFormat ,您可以將其設置為使用特定時區。

或者,使用java.time ,如果你使用的是Java 8,或班約達時間 ,否則-兩者都遠遠更好的選擇java.util.Datejava.util.Calendar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM