簡體   English   中英

將 ZonedDateTime 和 Instant 格式化為不同的字符串格式

[英]Format ZonedDateTime and Instant to different string format

我閱讀了 ZonedDate 和 Instant 的文獻,發現我可以通過以下方式將本地時間轉換為 UTC:

LocalDate d = LocalDate.now();
LocalTime time = LocalTime.of(00, 00, 00);
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = ZonedDateTime.of(d, time, zone);
System.out.println(zonedDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));

Instant instant = zonedDateTime.toInstant();
System.out.println(instant); 

問題是輸出如下所示:

2018-11-26T00:00:00
2018-11-26T08:00:00Z

我試圖以“yyyy-MM-dd HH:mm:ss”的格式獲取兩個字符串,但很難讓任何東西正常工作。 由於我使用輸出來查詢 MYSQL 數據庫,因此我可以手動執行以下操作:

String zoneDate = zonedDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
String utcDate = zonedDateTime.toInstant().toString();
zoneDate = zoneDate.replace('T', ' ').replace('Z', ' ');
utcDate = utcDate.replace('T', ' ').replace('Z', ' ');

我的新輸出是:

2018-11-26 00:00:00
2018-11-26 08:00:00 

但我覺得這是不好的做法,應該有一種方法可以在類中轉換為正確的格式。 有沒有這樣一種方法可以從默認類執行上述格式化?

按照下面的片段。

LocalDate d = LocalDate.now();
LocalTime time = LocalTime.now();
ZoneId zone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = ZonedDateTime.of(d, time, zone);
String zoneDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(zonedDateTime);
ZonedDateTime utcZonedDateTime = zonedDateTime.withZoneSameInstant(ZoneId.of(ZoneOffset.UTC.getId()));
String utcZoneDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(utcZonedDateTime);

System.out.println(zoneDate);
System.out.println(utcZoneDate);     

輸出是

2018-11-26 02:20:08
2018-11-26 10:20:08

有關更多信息,請訪問 java doc -> https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

暫無
暫無

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

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