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

Tin*_*iny 1 jsp hibernate jstl jodatime

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

<%@taglib prefix="joda" uri="http://www.joda.org/joda/time/tags" %>
Run Code Online (Sandbox Code Playgroud)

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

使用以下 JSTL 标记,

<c:set var="startDate" value="${row.discountStartDate}"/>
<c:set var="endDate" value="${row.discountEndDate}"/>
Run Code Online (Sandbox Code Playgroud)

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

2013-02-16T22:31:59.000+05:30 
2013-02-28T22:32:03.000+05:30   
Run Code Online (Sandbox Code Playgroud)

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

<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"/>
Run Code Online (Sandbox Code Playgroud)

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

java.lang.IllegalArgumentException:格式无效:“2013-02-16T22:31:59.000+05:30”在“13-02-16T22:31:59.000+05:30”处格式错误

如何解析这些日期

Tin*_*iny 5

经由休眠返回的日期row.discountStartDate,并row.discountEndDate在这个例子中是明显的类型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;
Run Code Online (Sandbox Code Playgroud)

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

<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"/>
Run Code Online (Sandbox Code Playgroud)

格式标签的值属性必须是 typeReadableInstantReadablePartial

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

S = Short
M = Medium
L = Long
F = Full
- = None
Run Code Online (Sandbox Code Playgroud)

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