Date.toString不显示本地时区

时间:2015-04-08 13:32:03

标签: java date calendar locale

我有一个webapp。我正在尝试记录某个过程完成的时间。

m_jobResults.addMessage("sum done", new    Date().toString());

我看到Date.toString()返回GMT时间而不是本地时区。如果我在同一台机器上编写测试java程序,它会在我当地的时区显示时间。任何人都可以建议这里出了什么问题。 另请注意java.util.Calendar.getInstance().getTimeZone()在webapp中调试时显示gmt,其中示例测试代码显示为正确的本地时区。

2 个答案:

答案 0 :(得分:1)

首先你要知道的是:

  • Date 始终基于UTC。
  • 日期没有"本地实例。"

如果您想要拥有本地时区,请DateCalendar和/或TimeZone.getDefault()一起使用。

使用TimeZone.getTimeZone("Europe/Madrid")获取巴塞罗那时区。

如果您想查找服务器时区check here

final TimeZone timeZone = TimeZone.getDefault();

但也许您的服务器不在您的用户所在的位置......所以要获取用户的区域设置与您的服务器的时区:

private String getServerTimeZoneDisplayName()
{
    final TimeZone timeZone = TimeZone.getDefault();
    final boolean daylight = timeZone.inDaylightTime(new Date());
    final Locale locale = servletRequest.getLocale();
    return timeZone.getDisplayName(daylight, TimeZone.LONG, locale);
}

答案 1 :(得分:0)

如果您直接将Date转换为String,就像通过调用toString()一样,它将使用系统的默认时区进行格式化,代码为继续前进。在您的情况下,这恰好是GMT。

如果您希望使用不同的时区对其进行格式化,请使用SimpleDateFormat对象并在该对象上指定所需的时区:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
df.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));

String text = df.format(new Date());
System.out.println("The date and time: " + text);