我正試圖將收到的日期時間字串(IST格式)轉換為UTC格式。
String time = 124200;
String date = 05/09/21;
DateTimeFormatter parser = DateTimeFormatter. ofPattern("dd/MM/yyHmmss").withZone(ZoneId.of("UTC") )。)
String dateInString = date.concat(time);
ZonedDateTime dateTime = ZonedDateTime.parse(dateInString, parser)。
return Timestamp.valueOf(dateTime.toLocalDateTime() ).toString()。
這個代碼片段不能轉換為UTC。請讓我知道問題出在哪里
uj5u.com熱心網友回復:
長話短說:你決議的時間被認為是UTC,因為你首先附加了ZoneId.of("UTC")。這意味著您將該日期的時間視為以UTC記錄的一天的時間。
相反,你應該使用IST作為原始區域:
public static void main(String[] args) {
//以IST為單位的時間和日期(?)
String time = "124200"。
String date = "05/09/21";
//兩個決議器,一個用于日期,一個用于時間。
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/mm/uu") 。
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HHmmss"/span>)。
//使用決議器決議日期和時間。
LocalDate localDate = LocalDate.parse(date, dateFormatter)。
LocalTime localTime = LocalTime.parse(time,timeFormatter)。
/*
*直到這里,只有日期和時間,沒有區域!
* 如果你在這里應用UTC,決議出來的日期和時間將被視為UTC!
*/
///創建一個ZonedDateTime,從日期和時間中獲取所需的SOURCE區域。
ZonedDateTime istTime = ZonedDateTime.of(localDate, localTime, ZoneId.of("Asia/Kolkata") )。)
//然后將其轉換為UTC。
ZonedDateTime utcTime = istTime.withZoneSameInstant(ZoneId.of("UTC") )。)
//列印結果,以查看差異。
System.out.println(istTime)。
System.out.println(utcTime)。
}
這個代碼片段的輸出(隱含使用ZonedDateTime.toString())是
2021-09-05T12:42 05:30[Asia/Kolkata]
2021-09-05T07:12Z[UTC]
如果你的系統將IST作為其默認區域,你可以寫ZoneId.systemDefault()而不是ZoneId.of("Asia/Kolkata"),但是我不得不在我的機器上使用明確的區域,我在歐洲。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/328875.html
標籤:
下一篇:日期時間格式字串C#
