簡體   English   中英

將java.util.Date轉換為請求的其他時區

[英]Convert java.util.Date to different time zone requested

根據請求的URL,我必須將Date轉換為其他請求的時區,並以String形式返回日期和時間。 我在Spring Boot和Mongo 3.2中使用Java 8

因此,在服務方法內部,我首先將時區設置如下,

TimeZone.setDefault(TimeZone.getTimeZone(TIME_ZONE))

但是我注意到,它將改變整個Java應用程序的時區。 因此,即使方法退出,該時區仍將是我之前設置的時區。

因此,我改為在下面的SimpleDateFormat專門設置setDefault方法級別,

(assignment是一個Assignmet文檔類,具有java.util.Date作為映射為mongodb集合的名為assignmentEndDate的屬性。在mongo db中,assignmentEndDate存儲為UTC)

   java.text.DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy'T'HH:mm:ss.SSS");
   formatter.setTimeZone(TimeZone.getTimeZone(timezone));
   Date assignmentEndDate = assignment.getAssignmentEndDate();
   formatter.format(assignmentEndDate);

這樣,它不會更改應用程序級別的時區。 這是這種情況下的正確方法嗎?

利用Java 8中包含的新日期時間api。

ZoneId zoneId = ZoneId.of("America/Chicago");

您可以從Instant ,Java util date equalivent開始。

Instant instant = Instant.now();
ZonedDateTime zonedDateTime = instant.atZone(zoneId);

要么

您也可以從使用ZonedDateTime開始

您可以將datetime用作LocalDateTime ,時區不可知類並轉換為ZonedDateTime。

LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt = ldt.atZone(zoneId);

您可以通過訪問每個新日期/舊日期時間類上的幫助程序方法,在舊日期時間類和新時間之間輕松切換。

保存到mongo數據庫時更改為Java util date

//From ZonedDateTime to java util date.
Date oldDate = Date.from(zdt.toInstant());

//From Instant to java util date
Date oldDate = Date.from(instant);

//From Date to Instant.
Instant instant = date.toInstant();

所有新的日期時間api均內置有默認格式程序。

//2007-12-03T10:15:30-06:00[America/Chicago]
String zonedDatetime = zonedDateTime.toString();

對於特定格式,您始終可以將DateTimeFormatter傳遞給以下方法。

zonedDateTime.format(formatter)

暫無
暫無

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

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