1

我有一个 Access 数据库,其中有一列日期和时间以及一个时区,如下所示:

数据示例

所以,首先我要像这样创建一个 TimeZone 对象和一个 SimpleDateFormat 对象

TimeZone timeZone = TimeZone.getTimeZone(parseNull(rs.getString("TimeZone")));      
DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormatter.setTimeZone(timeZone);

然后,我正在阅读这样的日期:

String startDateString = rs.getDate("Start_Date") + " " + rs.getString("Start_Time").substring(11);
startDate = dateFormatter.parse(startDateString);

但是,如果我像这样打印出日期:

System.out.println("Start Actual: " + rs.getDate("Start_Date") + " " + rs.getString("Start_Time").substring(11));
System.out.println("Start Formatted: " + startDate);

我得到以下输出:

Start Actual: 2011-11-10 18:00:00
Start Formatted: Thu Nov 10 02:00:00 EST 2011

好吧……为什么?我觉得这很令人困惑。为什么我的 Date 对象不能在澳大利亚/悉尼时区正确显示,更好的是,我怎样才能让它正确工作,以便我可以在我的应用程序中正确设置日期?

提前感谢您的帮助!

4

2 回答 2

3

Ajava.util.Date没有时区。这是一个普遍的瞬间。当您以人类可读的格式显示日期时,您可以选择要在哪个时区显示该日期,并通过在用于将日期转换为字符串的 SimpleDateFormat 上设置时区来实现。

如果只是这样做System.out.println("Start Formatted: " + startDate)toString()则使用日期的方法,并且该toString()方法使用默认时区。

于 2012-05-21T21:24:37.407 回答
0

JB 是正确的,java.util.Date即无时区。要获得您正在寻找的输出,请尝试:

System.out.println("Start Formatted: " + dateFormatter.format(startDate).toString());

于 2012-05-21T21:34:35.180 回答