java 8 中的日期格式化程序

Date formatter in java 8

我有一个要求,我必须存储不同的日期和时间以及时区。 我使用了 java 8 的 ZonedDateTime。

ZoneId zoneId = ZoneId.of("US/Eastern");
ZonedDateTime zt = ZonedDateTime.now(zoneId);

System.out.println(zt.toString());

我的问题是我想以 java.util.Date 格式存储它。 我使用了 DateTimeFormatter

 DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
dtf.format(zt);

直到这里它工作正常,当我尝试使用简单的日期格式

将其转换为 java.util.Date 时,这给了我所需的字符串格式日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
System.out.println(sdf.parse(dtf.format(zt)));

我得到的输出为 Sat Mar 12 00:44:10 IST 2016,但我希望输出为 java.util.Date 类型的 2016-03-11T14:14:10-05:00。有人可以建议我哪里出错了吗?

您使用的方式有误,这是更正后的代码

sdf.format(sdf.parse(val)) 这是正确的方法。

    ZoneId zoneId = ZoneId.of("US/Eastern");
    ZonedDateTime zt = ZonedDateTime.now(zoneId);

    System.out.println(zt.toString());
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
    String val = dtf.format(zt);
    System.out.println(val);

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    //String dateStr = zt.format(sdf);
    System.out.println(sdf.format(sdf.parse(val)));

ZonedDateTime > 即时 > 日期

最好避免使用旧的日期时间 classes,包括 java.util.Date。但如果你必须,你可以转换。在旧的 java.util.Date class.

上调用新的 from 方法

为此,您需要在 UTC 时间轴上 Instant 片刻。

Instant instant = myZonedDateTime.toInstant();
java.util.Date juDate = java.util.Date.from( instant );

往另一个方向走:

Instant instant = juDate.toInstant();