首頁 >Java >java教程 >為什麼我的 Java 程式碼錯誤地將日期和時間轉換為 CST?

為什麼我的 Java 程式碼錯誤地將日期和時間轉換為 CST?

Linda Hamilton
Linda Hamilton原創
2024-10-26 22:09:29582瀏覽

Why is my Java code converting date and time to CST incorrectly, and how can I fix it?

在Java 中將日期和時間轉換為特定時區

此Java 程式旨在將目前系統日期和時間轉換為特定時區。但是,提供的程式碼會產生不正確的結果,顯示從印度轉換為中部標準時間 (CST) 時存在時間差異。

了解時區轉換

時區是偏遠地區使用相同的標準時間。計算另一個時區的等效時間時,您必須調整時區偏移和夏令時 (DST) 設定的差異。

分析程式碼

程式碼依賴 SimpleDateFormat 和 Calendar 類別來操作日期和時間值。它嘗試使用以下步驟將當前系統時間轉換為 CST:

  1. 使用 Calendar 檢索當前日期和時間。
  2. 使用 SimpleDateFormat 將日期和時間解析為字串。
  3. 使用 TimeZone 取得 CST 時區,並將其設定為 SimpleDateFormat 物件的時區。
  4. 使用 CST 時區解析日期和時間字串。
  5. 列印轉換後的日期

解決差異

出現差異的原因是代碼未正確調整時區偏移和 DST 設定。提供的程式碼僅針對原始時區偏移進行調整,但不考慮 DST。

解決方案

要解決此問題,程式碼應針對原始時區進行調整抵消和 DST 節省。以下更正後的程式碼示範了這些調整:

<code class="java">Calendar calendar = Calendar.getInstance();
TimeZone fromTimeZone = calendar.getTimeZone();
TimeZone toTimeZone = TimeZone.getTimeZone("CST");

// Adjust for raw time zone offset
calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1);

// Adjust for daylight saving time
if (fromTimeZone.inDaylightTime(calendar.getTime())) {
    calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1);
}

// Adjust to target time zone
calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset());
if (toTimeZone.inDaylightTime(calendar.getTime())) {
    calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings());
}

System.out.println(calendar.getTime());</code>

透過新增這些調整,程式碼將準確地將日期和時間轉換為指定的時區,包括 DST 調整。

以上是為什麼我的 Java 程式碼錯誤地將日期和時間轉換為 CST?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn