JodaTime toDate提供了错误的日期

时间:2012-06-25 08:52:26

标签: java date jodatime

今天我在代码中发现了一个非常神秘的错误。我已经使用了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

DateHelper.formatDateTime()方法

public static DateTime formatDateTime(String text) {
    DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy");
    return format.parseDateTime(text);
}

我怀疑的唯一问题是格式(GMT和IST)。我该怎么做才能保持一致性。

2 个答案:

答案 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