我使用joda在xml中设置日期。我正在使用poi从excelsheet获取日期并使用以下代码在xml中设置它:
DateTimeFormatter fmt = DateTimeFormat.forPattern("EEE, dd MMM YYYY HH:mm:ss zzz")
.withLocale(Locale.getDefault());
DateTime dt = fmt.parseDateTime(summaryObj.getCreateDateTime().toString());
DateTimeFormatter fmt1 = DateTimeFormat.forPattern("dd/MM/yyyy");
//get current date only
DateTime currentDate = new DateTime();
int day = currentDate.getDayOfMonth();
int month = currentDate.getMonthOfYear();
int year = currentDate.getYear();
DateTime dt1 = fmt1.parseDateTime(String.valueOf(day)+"/"+ String.valueOf(month)+"/"+String.valueOf(year));
listOfPossibleEntities.add("DateOfCreation");
gc.setTime(dt1.toDate());
globalContextObj.setDateOfCreation(DatatypeFactory.newInstance()
.newXMLGregorianCalendar(gc));
summaryObj.getCreateDateTime()。toString()生成一个字符串,如“Sat Sep 16 05:30:00 IST 2006”。我得到函数parseDateTime()的异常。
java.lang.IllegalArgumentException: Invalid format: "Sat Sep 16 05:30:00 IST 2006" is malformed at " Sep 16 05:30:00 IST 2006"
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:866)
at scanning.ScanningEngine.getGlobalContext(ScanningEngine.java:2633)
我最初直接使用date而不是joda但是我们遇到了jackson deserialiser的异常,同时使用REST将xml作为json返回。这就是我决定切换到joda的原因,因为我看到一些帖子说jackson中有一些bug用于java.util.Date deserialisations。
如果有人知道为什么会出现invalidformat异常,请告诉我。 感谢。
答案 0 :(得分:0)
如果summaryObj.getCreateDateTime().toString()
为Sat Sep 16 05:30:00 IST 2006
,parseDateTime将为您的格式化程序抛出异常。无法解析“z”(来源:http://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html),因此您必须将IST
更改为+0530
。然后,使用DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss Z YYYY")
修改格式化程序。格式化程序必须类似于喂食字符串。我根据你的例子编写了这段代码,但它确实有用。
String summaryObj = "Sat Sep 16 05:30:00 +0530 2006";
DateTimeFormatter fmt = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss Z YYYY")
.withLocale(Locale.getDefault());
DateTime dt = fmt.parseDateTime(summaryObj);
编辑根据kavita的评论,我认为格式化程序的问题需要更好的解释。
您使用的是此格式化程序EEE, dd MMM YYYY HH:mm:ss zzz
,但输入字符串看起来像Sat Sep 16 05:30:00 IST 2006
,所以
Sat
由EEE
图案化,这是正确的Sep
正试图通过dd
进行图案化,这是几天的模式,这是kavita评论的答案(为什么在这里而不是IST
)。 Sep
的模式必须为MMM
16
代表天数,因此模式为dd
05:30:00
表示小时:分钟:秒,模式为HH:mm:ss
IST
是时区缩写,模式为0 z
(请注意,单个z
,而不是原始模式中的3个)。不幸的是,它无法解析2006
代表年份,模式YYYY
正确至于另一个问题(如何更改toString
的{{1}})我不知道是否可能,我建议使用SimpleDateFormatter之类的
Date
答案 1 :(得分:0)
我使用new DateTime(summaryObj.getCreateDateTime());
解决了这个问题
这不会给我任何IST或其他例外。