【问题标题】:Hibernate dealing with Date and Time - PostgreSqlHibernate 处理日期和时间 - PostgreSql
【发布时间】:2016-07-25 02:37:27
【问题描述】:

我在该实体中有一个实体我有 2 个属性:
dateStart - 应该只包含 yyyy-MM-dd
timeStart - 应该只包含时间 HH:mm

我正在使用 postgreSQL 数据库。我的表是这样定义的:

CREATE TABLE xxx
(
    dateStart date,
    timeStart time without time zone
)

我在 java 中使用 hibernate 映射了这个表(日期是 java.util.Date 的类型,如果可能的话,我想坚持使用它):

@Temporal(TemporalType.DATE)
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date dateStart;

@Temporal(TemporalType.TIME)
@DateTimeFormat(pattern = "HH:mm")
private Date dateTime;

我也在使用弹簧。我有一个表单,用户可以在其中填写实际创建此实体的输入

<form:form method="post" class="form-horizontal" action="..." commandName="xxx">
    <form:input path="dateStart" type="date"/>
    <form:input path="timeStart" type="time"/>
    .....
    <submit button>
</form:form>

这是我实际创建实体的控制器(当用户提交表单时)

@RequestMapping(value = "/viewSpecificTests", method = RequestMethod.POST)
public String viewSpecificTests(Model model, @Valid XXX xxx, BindingResult result) {

    if (result.hasErrors()) {
        return "createSpecificTest";
    }

    xxxService.createTable(xxx);
    return "viewSpecificTests";
}

但是,当我打印我的实体 xxx.toString() 时。我的日期和时间没有正确存储。 dateStart 如下所示:Tue Apr 05 00:00:00 CEST 2016
日期时间如下所示:Thu Jan 01 12:30:00 CET 1970

如何告诉 hibernate 只保留日期/只保留时间?由于某种原因,我被这个问题困扰了很长时间,@Temporal 并没有按照我想要的方式为我工作。

【问题讨论】:

  • 您是否检查了数据库中日期字段的存储方式?数据库中存储的值与日期对象的对象表示存在差异。
  • 是的,你完全正确。现在一切都说得通了。谢谢

标签: java spring hibernate postgresql


【解决方案1】:

我认为您应该将日期存储为日期。然后,当您从数据库中检索日期对象时,请使用我已说明的简单日期格式。

  public void getDate(){
       Date d = new Date();//Put your date here

       SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");//use java.text.SimpleDateformat

       String newFomart = formatter.format(d);
   }

这将以您想要的格式返回字符串。正如我所展示的那样,你所要做的就是通过你的约会。记住还要在 new SimpleDateFormat("String"); 中设置你想要的格式;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-25
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2013-06-30
    相关资源
    最近更新 更多