我在该实体中有一个实体,我有两个属性:
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不能按照我想要的方式为我工作,所以我长期坚持这个问题。
答案 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;);