【发布时间】:2011-12-27 21:50:03
【问题描述】:
@Jon Skeet,我按照您在Date parsing/formatting with TimeZone and SimpleDateFormat give different results around DST switch 中的建议下载了 Joda-Time,并将其添加到我的 Java EE / JSF 项目中,尝试使用 DateTime 和 DateTimeFormatter,它们返回的结果与 JDK 6 (见下文),因为现在是美国东部标准时间时区(美国/东部)的夏令时。
订单号 0739 行程日期 2011 年 11 月 11 日至 2011 年 11 月 12 日 客户号 1004
旅行日期/时间:11/11/2011 05:00 PM 报告日期/时间:11/11/2011 04:45 PM 返回日期/时间:11/13/2011 02:00 AM
代码如下:
public String getDateFromDateTime (Date date, Boolean display) throws ParseException {
/*
* SimpleDateFormat working as designed, but pf_ordersController.selected.returnDateTime displaying incorrect date/time
*
* see below from /orders/pf_View.xhtml
* pf_ordersController.selected.returnDateTime (displayed on JSF page) = 11/13/2011 02:00 AM
*
* ORDER # 0739 Trip Date 11/11/2011 to 11/12/2011 Customer # 1004
*
* Trip Date/Time: 11/11/2011 05:00 PM Report Date/Time: 11/11/2011 04:45 PM Return Date/Time: 11/13/2011 02:00 AM
*
* orders.returnDateTime (stored in database) = 11/12/2011 21:00:00 (9:00 PM)
* SimpleDateFormat converts orders.returnDateTime to 11/12/2011 (working as designed)
*
* https://stackoverflow.com/questions/2356672/date-parsing-formating-with-timezone-and-simpledateformat-problem-around-dst-swi
*
DateFormat formatter;
String myDate;
if (display)
formatter = new SimpleDateFormat("MM/dd/yyyy");
else
formatter = new SimpleDateFormat("yyyy-MM-dd");
myDate = formatter.format(date);
*
*/
DateTimeFormatter dtFormatter;
if (display)
dtFormatter = DateTimeFormat.forPattern("MM/dd/yyyy");
else
dtFormatter = DateTimeFormat.forPattern("yyyy-MM-dd");
DateTime dt = new DateTime(date);
String myDate = dt.toString(dtFormatter);
System.out.println("OrderDisplayUtil.java:getDateFromDateTime(" + date + ", " + display + "): " + "myDate = " + myDate);
return myDate;
}
请帮忙。谢谢。
【问题讨论】:
-
正如 orien 所说,我们需要知道您是如何获得输入的。我不介意它是以单元测试的形式还是一个简短但完整的控制台应用程序的形式,但我可以以任何一种方式运行:)
-
@JonSkeet,感谢您的快速回复。我刚刚确认 SimpleDateFormat 正在按设计工作,因为问题日期/时间是 Orders.returnDateTime,它传递给此方法 getDateFromDateTime(Orders.returnDateTime, ...)。 Orders.returnDateTime = 2011-11-12 21:00:00,但由于某种原因,我的 JSF/控制器代码显示为 2011-11-13 02:00:00。我会继续看这个。顺便说一句,谢谢你让我知道我应该如何提问;我敢肯定,您已经可以说我是这里的新手。 :)
-
有关提出好问题的更多建议,请参阅tinyurl.com/so-hints。听起来您的代码中有 很多 次转换。将它们一一隔离,然后准确地找出问题所在。
-
@JonSkeet,你说得对,我确实有很多转换,我想知道这对 JSF 来说是否太多了。我有一个tripDateTime、reportDateTime 和returnDateTime。我最终决定使用 Joda-Time (DateTime) 返回格式化的日期字符串,因为在 bean 中传递它时 returnDateTime 值是正确的,但是 JSF xhtml 根本没有显示正确的值。 bean 将格式化的日期字符串返回给 JSF xhtml,这解决了我的问题。再次感谢您的回复。
标签: java jodatime date-format simpledateformat