嘗試使用以下代碼在不同時區打印時間,但不起作用。任何想法爲什麼?日曆實例不工作
GregorianCalendar.getInstance(TimeZone.getTimeZone("PST")).getTime()
。它按照我的時區打印時間,而不是在PST。
嘗試使用以下代碼在不同時區打印時間,但不起作用。任何想法爲什麼?日曆實例不工作
GregorianCalendar.getInstance(TimeZone.getTimeZone("PST")).getTime()
。它按照我的時區打印時間,而不是在PST。
由設計java.util.Date將被初始化自紀元以來的UTC毫秒,因此不考慮時區。下面的代碼將生成:
Calendar pstCalendar = GregorianCalendar.getInstance(TimeZone.getTimeZone("PST"));
Calendar defCalendar = GregorianCalendar.getInstance(TimeZone.getDefault());
// Same values here :
System.out.println(pstCalendar.getTime());
System.out.println(defCalendar.getTime());
// Different values here :
System.out.println(pstCalendar.get(Calendar.HOUR_OF_DAY));
System.out.println(defCalendar.get(Calendar.HOUR_OF_DAY));
的溶液。將不會直接轉換成日期對象之前使用getTime方法而是採取Calendar.ZONE_OFFSET考慮並採取DIFF:
Date d = new Date();
// Default time :
System.out.println(d);
d.setTime(d.getTime() + pstCalendar.get(Calendar.ZONE_OFFSET));
// Time after applying offset
System.out.println(d);
Calendar#getTime() - 返回表示此日曆的時間值的Date對象(與Epoch的毫秒偏移量。準確地說,java.util.Date中的值是自Unix時代開始的毫秒數,發生在UTC時間1970年1月1日午夜的UTC和java.util.Date沒有特定的時區。
在另一方面,你可以實現你試圖用這種方式做也
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("PST"));
System.out.println(sdf.format(new Date()));
的java.util.Date和.Calendar類是出了名的麻煩和過時。避免它們。而是使用Joda-Time或Java 8中的java.time包(受Joda-Time啓發)。
與j.u.Date不同,這些其他兩個庫中的日期 - 時間對象知道它們自己分配的時區。
Joda-Time 2.5中的一些示例代碼。在使用Joda-Time時,使用時區變得基本。
DateTime dateTimeDefaultZone = DateTime.now(); // The JVM’s current default time zone assigned. I recommend always specifying a zone instead of implicitly relying on default.
DateTime dateTimeLosAngeles = dateTimeDefaultZone.withZone(DateTimeZone.forID("America/Los_Angeles"));
DateTime dateatimeUtc = dateTimeDefaultZone.withZone(DateTimeZone.UTC);
DateTime dateTimeKolkata = dateTimeDefaultZone.withZone(DateTimeZone.forID("Asia/Kolkata"));
使用proper time zone names。避免使用3或4個字母代碼,因爲它們既不標準也不唯一,並且會進一步混淆夏令時問題。
要將java.util.Date.getTime()的含義更改爲* local * millis,實際上是一個非常糟糕的設計思路。你正在編寫與規範含義相反的規則,忽略了該類的規範。這只是一個骯髒的黑客。 – 2014-10-22 15:46:11