Java Date类和Hibernate

Java Date类和Hibernate,java,hibernate,jsp,Java,Hibernate,Jsp,在实体类中,我有一个字段publicationDate,它的类型是java.util.Date。当我使用hibernate从数据库中获取数据时,我将其传递到JSP页面以打印publicationDate,但我不仅有日、月、年,还有时间。是否可以只将日期、月份、年份传递给JSP页面日期对象?或者我应该使用另一个类而不是java.util.Date 有两种方法。 使用SimpleDataFormat类在java内部更改日期 SimpleDateFormat formatter=new SimpleD

在实体类中,我有一个字段publicationDate,它的类型是java.util.Date。当我使用hibernate从数据库中获取数据时,我将其传递到JSP页面以打印publicationDate,但我不仅有日、月、年,还有时间。是否可以只将日期、月份、年份传递给JSP页面日期对象?或者我应该使用另一个类而不是java.util.Date

有两种方法。 使用SimpleDataFormat类在java内部更改日期

SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd");

String dates=formatter.format(mydate);
//mydate is your date object
在JSP中,您希望为此使用JSTL。假设${bean.date}返回java.util.date,下面介绍如何使用它:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
...
<fmt:formatDate value="${bean.date}" pattern="yyyy-MM-dd" />

...

有两种方法。 使用SimpleDataFormat类在java内部更改日期

SimpleDateFormat formatter=new SimpleDateFormat("yyyy-MM-dd");

String dates=formatter.format(mydate);
//mydate is your date object
在JSP中,您希望为此使用JSTL。假设${bean.date}返回java.util.date,下面介绍如何使用它:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
...
<fmt:formatDate value="${bean.date}" pattern="yyyy-MM-dd" />

...

否不需要更改日期对象。使用
SimpleDataFormat
并根据需要解析日期对象。

否不需要更改日期对象。使用
SimpleDataFormat
并根据需要解析日期对象。

正确无误

乔达时间 但是正如Tom Verelst的评论所说,您最好避免使用java.util.Date、j.u.Calendar和java.text.SimpleDataFormat类。他们是出了名的麻烦

取而代之的是使用任何一个库,可能与库结合使用,以便与Hibernate集成,正如Tom在评论中提到的那样。或者,在Java8中,您可以使用新的Java.time.*包,该包由JSR310定义,并受Joda time的启发

您可以轻松地在java.util.Date和Joda时间之间来回转换

Joda Time提供了多种方式将日期时间表示为格式化字符串。如果知道用户的区域设置或首选项,则可以对输出进行本地化。使用诸如:joda、date、format等词搜索StackOverflow以查找许多示例。我在下面的示例中选择了其中一种方法。默认情况下,Joda Time以标准格式输出字符串,如下所示

示例代码 使用Joda Time 2.3

java.util.Date myDate=new java.util.Date();
//指定时区,而不是依赖默认值。
DateTimeZone timeZone=DateTimeZone.forID(“欧洲/巴黎”);
//将java.util.Date对象转换为Joda Time DateTime对象。
DateTime DateTime=新的日期时间(myDate,时区);
//Factory从两个字符样式的图案创建格式。
//第一个字符是日期样式,第二个字符是时间样式。
//为短样式指定“S”,为中样式指定“M”,为长样式指定“L”,为全样式指定“F”。
//日期或时间可以通过指定样式字符“-”来输入。
字符串输出=DateTimeFormat.forStyle(“M-”).withLocale(Locale.FRANCE).print(dateTime);
java.util.Date backtodate再次=dateTime.toDate();//来回转换。
转储到控制台

System.out.println(“myDate(说谎,实际上没有时区):”+myDate);
System.out.println(“dateTime:+dateTime”);
System.out.println(“输出:”+输出);
当运行时

myDate(说谎,实际上没有时区):太阳2014年1月26日15:48:24太平洋标准时间
日期时间:2014-01-27T00:48:24.391+01:00
产出:1月27日。2014
正确无误

乔达时间 但是正如Tom Verelst的评论所说,您最好避免使用java.util.Date、j.u.Calendar和java.text.SimpleDataFormat类。他们是出了名的麻烦

取而代之的是使用任何一个库,可能与库结合使用,以便与Hibernate集成,正如Tom在评论中提到的那样。或者,在Java8中,您可以使用新的Java.time.*包,该包由JSR310定义,并受Joda time的启发

您可以轻松地在java.util.Date和Joda时间之间来回转换

Joda Time提供了多种方式将日期时间表示为格式化字符串。如果知道用户的区域设置或首选项,则可以对输出进行本地化。使用诸如:joda、date、format等词搜索StackOverflow以查找许多示例。我在下面的示例中选择了其中一种方法。默认情况下,Joda Time以标准格式输出字符串,如下所示

示例代码 使用Joda Time 2.3

java.util.Date myDate=new java.util.Date();
//指定时区,而不是依赖默认值。
DateTimeZone timeZone=DateTimeZone.forID(“欧洲/巴黎”);
//将java.util.Date对象转换为Joda Time DateTime对象。
DateTime DateTime=新的日期时间(myDate,时区);
//Factory从两个字符样式的图案创建格式。
//第一个字符是日期样式,第二个字符是时间样式。
//为短样式指定“S”,为中样式指定“M”,为长样式指定“L”,为全样式指定“F”。
//日期或时间可以通过指定样式字符“-”来输入。
字符串输出=DateTimeFormat.forStyle(“M-”).withLocale(Locale.FRANCE).print(dateTime);
java.util.Date backtodate再次=dateTime.toDate();//来回转换。
转储到控制台

System.out.println(“myDate(说谎,实际上没有时区):”+myDate);
System.out.println(“dateTime:+dateTime”);
System.out.println(“输出:”+输出);
当运行时

myDate(说谎,实际上没有时区):太阳2014年1月26日15:48:24太平洋标准时间
日期时间:2014-01-27T00:48:24.391+01:00
产出:1月27日。2014
如果你想要一个好的日期时间框架,我建议你结合使用。如果你想要一个好的日期时间框架,我建议你结合使用。