我想了解為什么這段代碼會給我不同的結果。
我想格式化2022-10-12T00:00:00.000Z成yyyy-MM-dd格式。
- 在 Java IDE 中在線運行結果:
2022-10-12 - 但是在我自己的電腦上結果是:
2022-10-11
String date = "2022-10-12T00:00:00.000Z";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
TemporalAccessor ta = DateTimeFormatter.ISO_INSTANT.parse(date);
Instant i = Instant.from(ta);
Date d = Date.from(i);
dateFormat.format(d);
uj5u.com熱心網友回復:
如果在線 IDE 運行在與您不同的時區,則一個時區可能是 10-12,而另一個時區仍然是 10-11。您已將 Z 指定為輸入的時區,但尚未指定用于格式化日期的時區。
uj5u.com熱心網友回復:
Louis Wasserman 的回答是正確的。幾個要點:
- java.util日期時間 API 及其格式化 API已
SimpleDateFormat過時且容易出錯。建議完全停止使用它們并切換到現代日期時間 API。 SimpleDateFormat沒有辦法在模式中指定時區。指定時區的SimpleDateFormat方法是呼叫SimpleDateFormat#setTimeZone(java.util.TimeZone). 沒有明確設定時區,SimpleDateFormat使用系統時區。如果您完成以下操作,您可以獲得所需的結果
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
dateFormat.format(d);
解決方案
我想將 2022-10-12T00:00:00.000Z 格式化為 yyyy-MM-dd 格式
使用 java.time API 進行演示:
由于您的日期時間字串是 UTC,您只想從 UTC 日期時間中獲取日期部分:
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
String strDate = "2022-10-12T00:00:00.000Z";
// Parse the given text into an OffsetDateTime and format it
String desiredString = OffsetDateTime.parse(strDate)
.format(DateTimeFormatter.ISO_LOCAL_DATE);
System.out.println(desiredString);
}
}
輸出:
2022-10-12
從Trail:Date Time了解有關現代日期時間 API 的更多資訊。
uj5u.com熱心網友回復:
可能是Date/SimpleDateFormat 不支持時區。您可以嘗試使用 java.time 包:
LocalDate.now()
DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDate.now())
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/536964.html
