簡體   English   中英

java.util.Date是否使用TimeZone?

[英]Is java.util.Date using TimeZone?

我有2台不同的計算機,每台計算機都有不同的TimeZone。

在一台計算機上打印System.currentTimeMillis() ,然后在兩台計算機上打印以下命令: System.out.println(new Date(123456)); -> 123456代表1號計算機中currentTimeMillis中的數字。

兩台計算機上的第二張打印件(盡管鍵入了硬編碼)導致打印結果不同。 這是為什么?

關於一些學究的細節。

java.util.Date與時區無關。 在javadoc中說得很對。

您想要某個特定時區的東西嗎? 那是java.util.Calendar

棘手的部分? 當您打印此內容(使用java.text.DateFormat子類 )時,將涉及一個Calendar(涉及一個時區)。 請參見DateFormat.setTimeZone()

它肯定看起來(沒有檢查實現)像java.util.Date.toString()通過DateFormat。 因此,即使我們(主要是)與時區無關的類也弄混了時區。

是否想從我們的純無區域Date對象中獲取時區內容? Date.toGMTString() 或者,您可以創建自己的SimpleDateFormatter並使用setTimeZone()來控制自己使用哪個區域。

這是為什么?

因為諸如“ 2009年10月4日14:20”之類的內容在不知道時區的情況下是沒有意義的-您現在最有可能看到它,因為這是我寫這篇文章的時間,與您的時間可能有幾個小時的差異即使是同一時間。

計算機時間戳通常以UTC(基本上是英國格林威治的時區)進行度量,並且在將它們格式化為人類可讀的格式時必須考慮時區。

因為該毫秒數是1970年1月1日UTC之后的毫秒數。 如果您隨后將其轉換為其他時區,則呈現的時間將有所不同。

例如123456可能對應於格林威治標准時間(UTC)的中午。 但這在紐約將是另一個時代。

要確認這一點,請使用帶有時區輸出的SimpleDateFormat ,和/或更改第二台計算機上的時區以使其與第一台計算機匹配。

javadoc在System.currentTimeMillis()中對此進行了很好的解釋。請注意,雖然返回值的時間單位為毫秒,但該值的粒度取決於基礎操作系統,並且可能更大。 例如,許多操作系統以幾十毫秒為單位測量時間。

請參閱https://docs.oracle.com/javase/7/docs/api/java/util/Date.html#toString()

是的,它使用時區。 它還應將它們打印出來(一年前的三個字符)。

暫無
暫無

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

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