這個問題在這里已經有了答案: 根據時區將日歷轉換為日期 [重復] (1 個回答) 昨天關閉。
我需要new Date();使用正確的時區生成一個,因為我需要記錄在我的服務器上收到新資料的日期和時間。(我知道您可以使用SimpleDateFormat,但它需要決議已創建的字串)。我正在使用Java Spring Boot。
uj5u.com熱心網友回復:
時間
該java.util日期時間API及API格式,SimpleDateFormat都已經過時,而且容易出錯。建議完全停止使用它們并切換到現代 Date-Time API *。
使用java.time現代日期時間 API 的解決方案:您可以使用ZonedDateTime適用的ZoneId.
演示:
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
// Use the applicable ZoneId
ZoneId zoneId = ZoneId.of("Asia/Dubai");
ZonedDateTime now = ZonedDateTime.now(zoneId);
System.out.println(now);
}
}
示例運行的輸出:
2021-10-30T02:26:07.471319 04:00[Asia/Dubai]
ONLINE DEMO
從Trail: Date Time 中了解有關現代日期時間 API 的更多資訊。檢查此答案和此答案以了解如何將java.timeAPI 與 JDBC結合使用。
注意事項java.util.Date:
一個java.util.Date物件只是代表時間線上的一個瞬間——一個包裝自 UNIX 時代(1970 年 1 月 1 日,格林威治標準時間 00:00:00)以來的毫秒數。由于它不保存任何時區資訊,因此它的toString函式應用 JVM 的時區以從該毫秒值派生String的格式回傳。要以不同的格式和時區表示物件,您需要使用所需的格式和適用的時區,例如EEE MMM dd HH:mm:ss zzz yyyyStringjava.util.DateSimpleDateFormat
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.ENGLISH);
sdf.setTimeZone(TimeZone.getTimeZone("America/New_York"));
String strDateNewYork = sdf.format(date);
sdf.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
String strDateUtc = sdf.format(date);
* 如果您正在為 Android 專案作業并且您的 Android API 級別仍然不符合 Java-8,請檢查通過 desugaring 可用的 Java 8 API。請注意,Android 8.0 Oreo 已提供對java.time.
uj5u.com熱心網友回復:
使用日期格式。例如,
SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
isoFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = isoFormat.parse("2010-05-23T09:01:02");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/345902.html
