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

Posted

技术标签:

【中文标题】无法使用 Java 8 将给定的本地日期转换为 GMT 日期 [重复]【英文标题】:Unable to convert a given Local Date to GMT Date using Java 8 [duplicate] 【发布时间】:2018-08-05 15:20:15 【问题描述】:

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

考虑以下代码 sn-p。

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]

请引导我到那里!

【问题讨论】:

如果您仔细查看您的代码,您没有在任何地方提到5:30 的延迟。你的ZonedDateTime 应该有这些数据。 【参考方案1】:

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

见https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html

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

【讨论】:

正确。解决方案代码为LocalDateTime.parse( … ).atZone( ZoneId.of( “Asia/Kolkata” ) ).toInstant()【参考方案2】:
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")));

【讨论】:

我认为你的回答是对的,但你应该解释一下你在做什么。 工作就像一个魅力。我只是将其更改为考虑系统的默认时区。 Instant instant = ldt.atZone(ZoneId.systemDefault()).toInstant();

以上是关于无法使用 Java 8 将给定的本地日期转换为 GMT 日期 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java:无法将给定的对象格式化为日期

如何使用 ZonedDateTime 或 Java 8 将任何日期时间转换为 UTC

如何将 DateTime 转换为/从特定的字符串格式(两种方式,例如给定格式为“yyyyMMdd”)?

使用 java 8 和格式将字符串转换为日期 -> 'uuuu-MM-dd'

Java - 取两个字符串并组合成一个日期对象

在 Java 中,如何将任何格式的数字日期(例如 dd/MM/yyyy)转换为任何其他数字格式(例如 yyyy-MM-dd)? [复制]