微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DateTimeFormatter无法应用于java.util.Date

如何解决DateTimeFormatter无法应用于java.util.Date

我已决定使用DateTimeFormatter而不是SimpleDateFormat,因为我听说SimpleDateFormat不是线程安全的。我已经在常量文件中声明了DateTimeFormatter,如下所示。

public static final DateTimeFormatter GENERAL_TZ_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");

在我的类文件中,我的实现是这样的。

String value = Constant.GENERAL_TZ_FORMATTER.format(new Date(date.get()));

但似乎这不是正确的实现。因为它说DateTimeFormatter中的格式(java.time.temporal.TemporalAccessor)无法应用于(java.util.Date)并返回类似“ java.incompatible.types: java.util.Date cannot be converted to java.time.temporal.TemporalAccessor”的错误

我正在为此做背景研究,但仍在努力寻找解决问题的最佳方法。我想知道您对此的想法,它将帮助我找到更好的解决方案。非常感谢您的建议。谢谢。

解决方法

new Date(date.get())表示date.get()返回带有毫秒数的long

由于您正在使用新的Java Time API中的DateTimeFormatter,因此必须为该API提供相同日期和时间的对象。 Instant就是这样一个对象,它可以使用毫秒级的自纪元值创建。

但是,您使用的格式字符串不能与Instant一起使用,因此您首先需要在相关时区将其转换为ZonedDateTime。在下面的代码中,我们假设您需要JVM的默认时区,这是旧的java.util.Date API会使用的默认时区。

long epochMilli = 1598336543358L;

DateTimeFormatter GENERAL_TZ_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");

Instant instant = Instant.ofEpochMilli(epochMilli);
ZonedDateTime dateTime = instant.atZone(ZoneId.systemDefault());
String value = GENERAL_TZ_FORMATTER.format(dateTime);
       // or:  dateTime.format(GENERAL_TZ_FORMATTER)
System.out.println(value);

由于我处于美国东部时区,因此我得到:

2020-08-25 02:22:23 EDT

您可以将其编写为单个语句,如下所示,但是您可能需要将其格式化为多行以使其易于阅读。

// Single line
String value = Instant.ofEpochMilli(epochMilli).atZone(ZoneId.systemDefault()).format(GENERAL_TZ_FORMATTER);
// Formatted for readability
String value = Instant.ofEpochMilli(epochMilli)
                      .atZone(ZoneId.systemDefault())
                      .format(GENERAL_TZ_FORMATTER);
,

public void onSubmitClick() { quotesModel.setCompanyName(companyName.getValue()); quotesModel.setRecordNum(recordNum.getValue()); sendQuote(); } 是Java新时间API的一部分。如果您想使用DateTimeFormatter,则应该考虑使用DateTimeFormatter而不是LocalDateTime

您可以在以下情况下使用java.util.Date

DateTimeFormator
,
class Constant {
    public static final SimpleDateFormat GENERAL_TZ_FORMATTER = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");

    public static void main(String[] args) {
        String value = Constant.GENERAL_TZ_FORMATTER.format(new Date());
        System.out.println(value);
    }
}

您可以如上所述使用 SimpleDateFormat

有关SimpleDateFormat的更多信息,您将通过关注link

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。