【问题标题】:Date formatter in java 8java 8中的日期格式化程序
【发布时间】:2016-03-11 19:21:48
【问题描述】:

我有一个要求,我必须使用时区存储不同的日期和时间。 我使用了 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。有人可以建议我哪里出错了吗?

【问题讨论】:

  • 目前您在最后一行调用Date.toString()。到那时,您又回到了许多其他问题的同一点——java.util.Date 不存储时区或格式。
  • (如果可以的话,我强烈避免使用java.util.Date - 尽可能广泛地使用java.time 类型。)
  • 如果你使用 Java 8,为什么要Date?

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


【解决方案1】:

你用错了,这是正确的代码

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

【讨论】:

  • 这是提供所需的输出,但它是字符串格式。我想以日期格式存储输出 2016-03-12T02:44:28-0500。
  • @ShaikMujahidAli 答案是正确的,所以你应该接受它。您需要了解java.util.Date 类型的对象不携带任何格式信息。其方法toString() 的规范输出无法配置为其他格式。
  • 请记住,如果您有多线程应用程序,SImpleDateFormat 是不安全的。
【解决方案2】:

ZonedDateTime > 即时 > 日期

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

为此,您需要一个Instant 在UTC 时间线上的时刻。

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

去另一个方向:

Instant instant = juDate.toInstant();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 2015-06-17
    • 2021-03-06
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    相关资源
    最近更新 更多