IST 到 UTC 的转换 java
IST to UTC conversion in java
我正在尝试将收到的日期时间字符串(IST 格式)转换为 UTC 格式。
String time = 124200;
String date = 05/09/21;
DateTimeFormatter parser = DateTimeFormatter.ofPattern("dd/MM/yyHHmmss").withZone(ZoneId.of("UTC"));
String dateInString = date.concat(time);
ZonedDateTime dateTime = ZonedDateTime.parse(dateInString, parser);
return Timestamp.valueOf(dateTime.toLocalDateTime()).toString();
此代码段未转换为 UTC。请告诉我问题是什么
长话短说:您的解析时间被视为 UTC,因为您首先附加了 ZoneId.of("UTC")
。这意味着您在那天的那个时间就好像它是在 UTC.
中记录的一样
相反,您应该使用 IST 作为原始区域:
public static void main(String[] args) {
// time and date in IST (?)
String time = "124200";
String date = "05/09/21";
// two parsers, one for date and one for time
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/uu");
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HHmmss");
// parse the date and time using the parsers
LocalDate localDate = LocalDate.parse(date, dateFormatter);
LocalTime localTime = LocalTime.parse(time, timeFormatter);
/*
* until here, there's just date and time, NO zone!
* If you apply UTC here, the parsed date and time would be regarded as UTC!
*/
// create a ZonedDateTime with the desired SOURCE zone from the date and time
ZonedDateTime istTime = ZonedDateTime.of(localDate, localTime, ZoneId.of("Asia/Kolkata"));
// then convert it to UTC
ZonedDateTime utcTime = istTime.withZoneSameInstant(ZoneId.of("UTC"));
// print the results in order to view the difference
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")
,但我必须使用明确的区域我的机器,我在欧洲
我正在尝试将收到的日期时间字符串(IST 格式)转换为 UTC 格式。
String time = 124200;
String date = 05/09/21;
DateTimeFormatter parser = DateTimeFormatter.ofPattern("dd/MM/yyHHmmss").withZone(ZoneId.of("UTC"));
String dateInString = date.concat(time);
ZonedDateTime dateTime = ZonedDateTime.parse(dateInString, parser);
return Timestamp.valueOf(dateTime.toLocalDateTime()).toString();
此代码段未转换为 UTC。请告诉我问题是什么
长话短说:您的解析时间被视为 UTC,因为您首先附加了 ZoneId.of("UTC")
。这意味着您在那天的那个时间就好像它是在 UTC.
相反,您应该使用 IST 作为原始区域:
public static void main(String[] args) {
// time and date in IST (?)
String time = "124200";
String date = "05/09/21";
// two parsers, one for date and one for time
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/uu");
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HHmmss");
// parse the date and time using the parsers
LocalDate localDate = LocalDate.parse(date, dateFormatter);
LocalTime localTime = LocalTime.parse(time, timeFormatter);
/*
* until here, there's just date and time, NO zone!
* If you apply UTC here, the parsed date and time would be regarded as UTC!
*/
// create a ZonedDateTime with the desired SOURCE zone from the date and time
ZonedDateTime istTime = ZonedDateTime.of(localDate, localTime, ZoneId.of("Asia/Kolkata"));
// then convert it to UTC
ZonedDateTime utcTime = istTime.withZoneSameInstant(ZoneId.of("UTC"));
// print the results in order to view the difference
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")
,但我必须使用明确的区域我的机器,我在欧洲