【问题标题】:Date stored in different format以不同格式存储的日期
【发布时间】:2018-11-09 14:17:16
【问题描述】:

我有这个日期 "2018-05-30T16:19:58.016Z" 来自我的 Angular 应用程序。 在 Spring 中,date 字段如下:

@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
private Date date;

日期保存得很好,但格式为YYYY-MM-dd

我有什么遗漏的吗?

【问题讨论】:

    标签: date spring-boot jackson2


    【解决方案1】:

    您可能必须指定输出到存储的日期格式,因为@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") 仅指定将日期解析为 Date 对象的日期格式。即使您的 Date 包含所有秒数和时区信息,默认 Date toString() 仍然是

    以日期转义格式 yyyy-mm-dd 格式化日期。

    根据 Java 8 文档。因此,如果您使用它,它很可能会丢弃所有关于转换的额外信息。

    您可以查看此Convert java.util.Date to String,了解有关如何将日期转换为格式化字符串的信息。

    【讨论】:

    • 那么您建议更改setter中的日期格式?
    • @androniennn 您如何将日期存储在数据库中?也许编辑您的问题以添加该问题
    • 我保存对象,保存日期字段。对于那件事我没有任何疑问。我想我会尝试按照您的建议进行:在设置日期之前进行一个小的转换。
    • @androniennn 当您说I save the object, and the date field is stored 时,这可能是问题所在。如果您的“保存对象”代码使用 toString() 来保存日期对象,那么根据 javadocs,它将保存为 yyyy-mm-dd。在不知道您使用什么来保存对象的情况下,我无法确定。
    【解决方案2】:

    MySql date 类型不能保存带有时间戳的数据。它必须是 datetime 才能包含带有时间戳数据的日期时间。

    【讨论】:

    • 这个答案确实很有用!我将类型更改为datetime 看看我有什么。
    • 我刚刚将注释从DATE 更改为TERMPORAL,现在一切都很好。
    • 很高兴能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    相关资源
    最近更新 更多