如何使用Java 8库将UTC DateTime转换为另一个时区?

Tan*_*had 0 java datetime java-8

final Timestamp rawDateTime = Timestamp.valueOf("2031-04-25 18:30:00");
final ZoneId zoneId = ZoneId.of("Asia/Calcutta");
final ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(
    Instant.ofEpochMilli(rawDateTime.getTime()), zoneId); 
// here we are getting output as 2031-04-25T18:30+05:30[Asia/Calcutta]

final ZonedDateTime zonedDateTime1 = 
ZonedDateTime.of(rawDateTime.toLocalDateTime(), zoneId);
// here we are getting output as 2031-04-25T18:30+05:30[Asia/Calcutta]
Run Code Online (Sandbox Code Playgroud)

但我希望将转换日期时间设置为2031-04-26 00:00:00 + 5:30,因为我的时间戳值在UTC时区中.

请帮忙.

Mic*_*ael 7

首先,你不应该使用Timestamp.你可以DateTimeFormatter用来解析一个LocalDateTime.

然后LocalDateTime在转换到加尔各答区域之前将其分区为UTC ZonedDateTime.withZoneSameInstant.

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .append(DateTimeFormatter.ISO_LOCAL_DATE)
    .appendLiteral(' ')
    .append(DateTimeFormatter.ISO_LOCAL_TIME)
    .toFormatter();

LocalDateTime localDateTime = LocalDateTime.parse("2031-04-25 18:30:00", formatter);
ZoneId calcuttaZone = ZoneId.of("Asia/Calcutta");
ZonedDateTime calcuttaZonedDateTime = localDateTime.atZone(ZoneOffset.UTC)
    .withZoneSameInstant(calcuttaZone);
Run Code Online (Sandbox Code Playgroud)