我正在使用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”
如何解析这些日期
答案 0 :(得分:3)
在此示例中,row.discountStartDate
和row.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属性必须是ReadableInstant
或ReadablePartial
style
属性是用于解析的样式。它指定了两个字符,一个用于日期,一个用于时间。
S = Short
M = Medium
L = Long
F = Full
- = None
http://joda-time.sourceforge.net/contrib/jsptags/userguide.html