我有一个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对象不会在澳大利亚/悉尼时区正确显示,更好的是,如何正确地工作以便我可以正确设置我的应用程序中的日期?
提前感谢您的帮助!
答案 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());