Hibernate处理日期和时间 - PostgreSql

时间:2016-04-05 08:54:25

标签: java spring hibernate postgresql

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

我正在使用postgreSQL数据库。我的表定义如下:

    import java.util.Arrays;
    import java.util.Comparator;

public class Asdf {

    public static void main(final String[] args) {
        final String[][] data = new String[][] {
                new String[] { "2009.07.25 20:24", "Message A" },
                new String[] { "2009.07.25 20:17", "Message G" },
                new String[] { "2009.07.25 20:25", "Message B" },
                new String[] { "2009.07.25 20:30", "Message D" },
                new String[] { "2009.07.25 20:01", "Message F" },
                new String[] { "2009.07.25 21:08", "Message E" },
                new String[] { "2009.07.25 19:54", "Message R" } };

        Arrays.sort(data, new Comparator<String[]>() {
            @Override
            public int compare(final String[] entry1, final String[] entry2) {
                final String time1 = entry1[0];
                final String time2 = entry2[0];
                return time1.compareTo(time2);
            }
        });

        for (final String[] s : data) {
            System.out.println(s[0] + " " + s[1]);
        }
    }

}

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

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

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

@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>

然而,当我打印我的实体xxx.toString()时。我的日期和时间无法正确存储。 dateStart看起来像这样:Tue Apr 05 00:00:00 CEST 2016
dateTime如下所示:Thu Jan 01 12:30:00 CET 1970年

如何告诉hibernate仅保留日​​期/时间?由于某种原因@Tmporal不能按照我想要的方式为我工作,所以我长期坚持这个问题。

1 个答案:

答案 0 :(得分:2)

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

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

这将以您想要的格式返回字符串。所有你需要做的就是通过你所显示的日期。还记得在新的SimpleDateFormat中设置所需的格式(&#34; String&#34;);