无法使用Java 8将给定的本地日期转换为GMT日期

时间:2018-02-26 08:06:06

标签: java datetime java-8 gmt

我很难使用Java 8类LocalDateTimeZonedDateTime将给定的本地日期(使用IST)转换为GMT。

请考虑以下代码段。

LocalDateTime ldt = LocalDateTime.parse("22-1-2015 10:15:55 AM", DateTimeFormatter.ofPattern("dd-M-yyyy hh:mm:ss a"));

ZonedDateTime gmtZonedTime = ldt.atZone(ZoneId.of("GMT+00"));

System.out.println("Date (Local) : " + ldt);

System.out.println("Date (GMT) : " + gmtZonedTime);

产生以下输出:

Date (Local) : 2015-01-22T10:15:55
Date (GMT) : 2015-01-22T10:15:55

我认为这只是转换格式,而不是时间。

我期望的输出是:(因为GMT比IST落后5.30小时)

Date (Local) : 2018-02-26T01:30
Date (GMT) : 2018-02-26T08:00Z[GMT]

请指导我到那儿!

2 个答案:

答案 0 :(得分:4)

输出是你应该期待的。 LocalDateTime根本没有时区,它只是某个地方的日期和时间(未指定)。你认为它在IST中的假设是错误的,事实并非如此。 atZone方法添加时区,在本例中为UTC / GMT,但不会更改日期或时间。

请参阅https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html

您可能希望首先将LocalDateTime转换为IST的ZonedDateTime,然后将时区更改为UTC。这应该会改变时间。

答案 1 :(得分:1)

LocalDateTime ldt = LocalDateTime.parse("22-1-2015 10:15:55 AM",
            DateTimeFormatter.ofPattern("dd-M-yyyy hh:mm:ss a"));

Instant instant = ldt.atZone(ZoneId.of("GMT+05:30")).toInstant(); // get instant in timeLine by mentioning the zoneId at which you have obtained the ldt

System.out.println("Date (Local) : " + ldt);

System.out.println("Date (GMT) : " + LocalDateTime.ofInstant(instant, ZoneId.of("GMT")));