SimpleDateFormat返回“Sun Oct 10 00:00:00 BRT 2010”,但插入“2010-10-10”

时间:2016-04-01 01:23:33

标签: java mysql date simpledateformat

我有一个代码,我使用SimpleDateFormat

String data = jTData.getText();
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date dataInserir = null;
dataInserir = formatter.parse(data);
System.out.println(dataInserir);

如果jTData.getText()中的字符串为“2010-10-10”,则此代码的输出为:

Sun Oct 10 00:00:00 BRT 2010.

但是,它在数据库中插入了值2010-10-10。

该字段是:

 @Temporal(javax.persistence.TemporalType.DATE)
    private Date data;

我错过了什么,我无法获得2010-10-10作为Date的输出? 如果输出为2010-10-10,为什么插入值Sun Oct 10 00:00:00 BRT 2010? 任何帮助我都会感激不尽,谢谢。

1 个答案:

答案 0 :(得分:0)

我怀疑你混淆了java.util.Date班级与java.sql.Date的性质。第一个是日期时间,第二个是仅限日期。

您已将注释标记为javax.persistence.TemporalType.DATE。该枚举的文档简单地说:

  

映射为java.sql.Date

您说要存储仅限日期。

所以你遇到的是一个功能,而不是一个bug。

如果要存储包含时间的日期,请使用javax.persistence.TemporalType.TIMESTAMP注释。

在数据库中的列上添加时间戳类型(应该几乎总是带时间戳的时区类型)。

另外,我建议使用java.time框架而不是麻烦的java.util.Date和SimpleDateFormat类。但这是另一个话题。