3 回答

TA貢獻1809條經驗 獲得超8個贊
假設您擁有 root 權限,這將更改 Linux 中的操作系統時區:
import java.io.File;
import java.nio.file.Files;
import static java.nio.file.StandardCopyOption.COPY_ATTRIBUTES;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;? ??
// ...
String zone = "Asia/Tokyo";
File source = new File("/usr/share/zoneinfo/" + zone);
File dest = new File("/etc/localtime");
Files.copy(source.toPath(), dest.toPath(), REPLACE_EXISTING, COPY_ATTRIBUTES);
請注意,更改操作系統默認時區不會影響當前進程。另請注意,這不可移植。
創建符號鏈接可能會更好,但兩者都應該有效。
要永久更改單個用戶的時區,請export TZ='Asia/Tokyo'寫入啟動腳本,例如.bashrc. 您不需要為此提升權限。

TA貢獻1789條經驗 獲得超10個贊
JVM維護自己的默認時區,與主機操作系統時區設置無關。
大多數 Java 實現在啟動時都默認使用主機操作系統當前的默認時區?;蛘撸梢詫祩鬟f給 JVM 啟動程序以指定另一個時區。最后,調用TimeZone.setDefault
立即更改該 JVM 中運行的所有應用程序的所有線程中的所有代碼的當前默認時區。
我需要從 java 更改操作系統時區。
無法使用捆綁的 Java 類。據我所知,沒有任何 Java 實現能夠為 Java 應用程序提供這種功能。
您也許能夠從 Java 中調用一些本機應用程序或實用程序,這些應用程序或實用程序可能會更改主機操作系統時區設置。但您必須找到這樣的實用程序,并設置從 Java 到本機代碼的橋接調用?;蛘吣梢詧绦?shell 腳本來更改操作系統設置。
至于 Java 代碼中的日期時間處理,您不應依賴主機操作系統或 JVM 的默認時區。我建議始終將可選ZoneId
(或ZoneOffset
) 傳遞給各種日期時間方法。省略該參數會導致隱式依賴 JVM 當前的默認時區。最好指定您想要/預期的時區。
ZoneId?z?=?ZoneId.of(?"Africa/Tunis"?)?; ZonedDateTime?zdt?=?ZonedDateTime.now(?z?)?;
順便說一下,請注意Joda-Time項目現在處于維護模式。它的創建者 Stephen Colebourne 隨后在JSR 310 定義的java.time類中創建了它的后繼者,現在與 Java 8 及更高版本捆綁在一起。

TA貢獻1878條經驗 獲得超4個贊
這是可能的答案:
Calendar gmtTime = Calendar.getInstance(TimeZone.getTimeZone("GMT")); System.out.println(gmtTime.getTime());
添加回答
舉報