【问题标题】:Getting a SimpleDateFormat Date Object in Another Time Zone在另一个时区获取 SimpleDateFormat 日期对象
【发布时间】:2012-05-21 21:18:36
【问题描述】:

我有一个 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 对象不能在澳大利亚/悉尼时区正确显示,更好的是,我怎样才能让它正确工作,以便我可以在我的应用程序中正确设置日期?

提前感谢您的帮助!

【问题讨论】:

    标签: java ms-access date timezone simpledateformat


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我想我只是没有意识到每次我想将日期作为字符串获取时都需要重做“.format()”。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多