1

我正在使用joda-time-jsptags-1.1.1使用以下标记库在 JSP 页面上格式化和解析基于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”格式错误

如何解析这些日期

4

1 回答 1

5

在这个例子中,row.discountStartDate通过Hibernate 返回的日期显然是.row.discountEndDateorg.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 属性必须是 typeReadableInstantReadablePartial

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

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

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

于 2013-02-16T16:26:25.970 回答