在JSP中格式化和解析基于Joda-Time的日期和时间对象

时间:2013-02-16 12:17:36

标签: hibernate jsp jstl jodatime

我正在使用joda-time-jsptags-1.1.1在JSP页面上使用以下taglib格式化和解析基于Joda-Time的日期和时间对象。

<%@taglib prefix="joda" uri="http://www.joda.org/joda/time/tags" %>

我在Oracle数据库中有使用标准UTC格式存储的日期。

使用以下JSTL标记

<c:set var="startDate" value="${row.discountStartDate}"/>
<c:set var="endDate" value="${row.discountEndDate}"/>

这两个日期分别以下列格式显示。

2013-02-16T22:31:59.000+05:30 
2013-02-28T22:32:03.000+05:30   

我需要使用特定时区以特定格式显示这些日期。我正在尝试按如下方式解析这些日期。

<joda:parseDateTime var="startDate"
                    pattern="dd-MMM-yyyy HH:mm:ss"
                    value="${row.discountStartDate}"
                    dateTimeZone="Asia/Kolkata"/>

<joda:parseDateTime var="endDate"
                    pattern="dd-MMM-yyyy HH:mm:ss"
                    value="${row.discountStartDate}"
                    dateTimeZone="Asia/Kolkata"/>

我希望以给定的格式和区域解析这些日期。但是,我得到以下例外。

  

java.lang.IllegalArgumentException:格式无效:   “2013-02-16T22:31:59.000 + 05:30”发生了畸形   “13-02-16T22:31:59.000 + 05:30”

如何解析这些日期

1 个答案:

答案 0 :(得分:3)

在此示例中,row.discountStartDaterow.discountEndDate通过Hibernate返回的日期显然是org.joda.time.DateTime的类型。

这些属性由org.jadira.usertype.dateandtime.joda.PersistentDateTime在相应的实体类中指定,如

@Column(name = "DISCOUNT_START_DATE")
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime discountStartDate;

@Column(name = "DISCOUNT_END_DATE")    
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime discountEndDate;

因此,无需再次解析这些日期。我只需要用给定的格式和时区格式化这些日期,就像下面这样。

<joda:format var="startDate"
             value="${row.discountStartDate}"
             pattern="dd-MMM-yyyy HH:mm:ss"
             style="F-"
             dateTimeZone="Asia/Kolkata"/>

<joda:format var="endDate"
             value="${row.discountEndDate}"
             pattern="dd-MMM-yyyy HH:mm:ss"
             style="F-"
             dateTimeZone="Asia/Kolkata"/>

格式标记的value属性必须是ReadableInstantReadablePartial

类型

style属性是用于解析的样式。它指定了两个字符,一个用于日期,一个用于时间。

S = Short
M = Medium
L = Long
F = Full
- = None

http://joda-time.sourceforge.net/contrib/jsptags/userguide.html