在另一个时区获取SimpleDateFormat日期对象

时间:2012-05-21 21:18:36

标签: java ms-access date timezone simpledateformat

我有一个Access数据库,其中包含一列日期和时间以及如此的时区:

Data Example

所以,首先我要创建一个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对象不会在澳大利亚/悉尼时区正确显示,更好的是,如何正确地工作以便我可以正确设置我的应用程序中的日期?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

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

如果您执行System.out.println("Start Formatted: " + startDate),则会使用日期的toString()方法,而此toString()方法会使用默认时区。

答案 1 :(得分:0)

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

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