在Java中解析时区并删除国家/州

在Java中解析时区并删除国家/州,java,Java,我需要获取系统日期时间,但不需要使用以下代码获取[美国/纽约]。 有什么建议吗 String timestampAtGMT = DateTimeFormatter.ISO_DATE_TIME.withZone(ZoneId.systemDefault()).format(Instant.now()); String dateInAmerica = timestampAtGMT.trim(); System.out.println("In 'GMT-04:00' Time

我需要获取系统日期时间,但不需要使用以下代码获取[美国/纽约]。 有什么建议吗

    String timestampAtGMT = DateTimeFormatter.ISO_DATE_TIME.withZone(ZoneId.systemDefault()).format(Instant.now());
    String dateInAmerica = timestampAtGMT.trim();
    System.out.println("In 'GMT-04:00' Time Zone:" + dateInAmerica);
代码输出: 在“GMT-04:00”时区:2020-03-23T21:39:49.419-04:00[美国/纽约]


预期输出:在“GMT-04:00”时区:2020-03-23T21:39:49.419-04:00中,一种解决方案是删除
.withZone(ZoneId.systemDefault())
,然后将
Instant.now()
更改为
OffsetDateTime.now()
。这样,您的新代码段如下所示:

String timestamp = DateTimeFormatter.ISO_DATE_TIME.format(OffsetDateTime.now());
System.out.println("In 'GMT-04:00' Time Zone: " + timestamp);
输出为:

In 'GMT-04:00' Time Zone: 2020-03-23T21:52:10.794463-04:00

默认情况下,
OffsetDateTime#现在
使用系统时钟的默认时区,因此无需指定它。

我认为您需要的是一个
OffsetDateTime
且不需要格式化程序。简单地说:

    String dateInAmerica
            = OffsetDateTime.now(ZoneId.systemDefault()).toString();
    System.out.println("In 'GMT-04:00' Time Zone:" + dateInAmerica);
当我在JVM的时区设置为America/New_York的情况下运行时,我得到的输出是:

在“GMT-04:00”时区:2020-03-24T15:53:11.948127-04:00

OffsetDateTime
是带有偏移的日期和时间(例如-04:00),但没有时区,例如美国/纽约。因此,此时您可以获得时区的正确偏移量,而不必获取时区


从技术上讲,我们可以省略
ZoneId.systemDefault()
,但我更愿意在这里声明,告诉读者和我自己,我已经考虑了我想要哪个时区,并且有意识地选择依赖JVM默认值。

代码需要与国家/州无关。它可以是任何位置的DateTimestamp,具体取决于触发它的系统。谢谢!让它工作起来。“是的,修剪是不必要的。”塔伦潘德听了很高兴!如果你没有更多的问题,请随意接受答案:)好答案。出于兴趣,我仍然希望将
ZoneId.systemDefault()
作为参数传递给
now()
,以明确这是一个依赖于时区的操作,并且我已经睁大眼睛选择了我想要的时区。