Java 8中的日期格式化程序

Date formatter in java 8

我有一个要求,我必须存储带有时区的不同日期和时间。
我已经使用了Java 8的ZonedDateTime。

1
2
3
4
ZoneId zoneId = ZoneId.of("US/Eastern");
ZonedDateTime zt = ZonedDateTime.now(zoneId);

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

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

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

直到这里工作正常,当我尝试使用简单的日期格式将其转换为java.util.Date时,这给了我所需的字符串格式的日期。

1
2
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
System.out.println(sdf.parse(dtf.format(zt)));

我在IST 2016年3月12日星期六00:44:10获得输出,但我想在java.util.Date类型中将其输出为2016-03-11T14:14:10-05:00。有人可以建议我要去哪里哪里吗?


您使用的是错误的方式,这是已更正的代码

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

1
2
3
4
5
6
7
8
9
10
11
    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>即时>日期

最好避免使用旧的日期时间类,包括java.util.Date。但是,如果必须,您可以进行转换。在旧的java.util.Date类上调用新的from方法。

为此,您需要在UTC的时间轴上花费Instant的时间。

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

要走另一个方向:

1
Instant instant = juDate.toInstant();