2

今天我在代码中发现了一个非常神秘的错误。我使用 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)。我能做些什么来保持一致性。

4

2 回答 2

1

这两个值代表相同的时刻。由于时区不同,它们的渲染方式不同。这纯粹是渲染问题;再一次,他们是同一时间

为了可靠地将 a 转换DateTime为一致的“人类可读”字符串,您需要在渲染时指定时区、格式和语言环境:

String rendered = dateTime.withZone(DateTimeZone.UTC)
                          .toString("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);

当然,ISODateTimeFormat如果您希望计算机解析结果,则应该使用;在紧要关头,这既一致又有点人类可读。(它也很容易排序。)只有在可读性比其他任何事情都重要时才使用其他格式。

于 2012-06-25T09:43:46.353 回答
-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
于 2012-06-25T09:26:26.943 回答