[英]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.Date
和java.util.Calendar
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.