java 8中的日期格式化程序

时间:2016-03-11 19:21:49

标签: java java-8 date-format simpledateformat date-formatting

我有一个要求,我必须在时区存储不同的日期和时间。 我使用了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)));

我得到输出为2016年3月12日00:44:10 IST 2016但我希望在java.util.Date类型中输出为2016-03-11T14:14:10-05:00。有人可以建议我哪里出错吗?

2 个答案:

答案 0 :(得分:4)

您使用的方法是错误的,这是更正后的代码

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)));

答案 1 :(得分:2)

ZonedDateTime>即时>日期

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

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

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

走向另一个方向:

Instant instant = juDate.toInstant();