今天我在代码中发现了一个非常神秘的错误。我已经使用了JodaTime库一段时间以来一直保持一致。
DateTime dateTime = DateHelper.formatDateTime("25/06/2012");
TestHelper.spot(dateTime);
TestHelper.spot(dateTime.toDate());
结果 -
2012-06-25T00:00:00.000+05:30
Mon Jun 25 00:00:00 IST 2012
但是在另一个java应用程序中 -
2012-06-25T00:00:00.000+05:30
Sun Jun 24 18:30:00 GMT 2012
public static DateTime formatDateTime(String text) {
DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy");
return format.parseDateTime(text);
}
我怀疑的唯一问题是格式(GMT和IST)。我该怎么做才能保持一致性。
答案 0 :(得分:1)
这两个值代表相同的时间瞬间。由于时区不同,它们的呈现方式也不同。这纯粹是渲染的问题;再次,他们是同一时间。
要将DateTime
可靠地转换为一致的“人类可读”字符串,您需要在渲染时指定时区,格式和区域设置:
String rendered = dateTime.withZone(DateTimeZone.UTC)
.toString("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
当然,如果您希望计算机解析结果,则应使用ISODateTimeFormat
;在紧要关头,它既一致又有点人性化。 (它也很容易排序。)只有在可读性比其他任何东西都重要时才使用其他格式。
答案 1 :(得分:-1)
我把一个VM参数说明
-Duser.timezone="+05:30"
我删除后,一切正常。但现在的问题是我无法连接到Oracle 9i数据库。它给了我以下错误。
java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found