我有一个webapp。我正在尝试记录某个过程完成的时间。
m_jobResults.addMessage("sum done", new Date().toString());
我看到Date.toString()
返回GMT时间而不是本地时区。如果我在同一台机器上编写测试java程序,它会在我当地的时区显示时间。任何人都可以建议这里出了什么问题。
另请注意java.util.Calendar.getInstance().getTimeZone()
在webapp中调试时显示gmt,其中示例测试代码显示为正确的本地时区。
答案 0 :(得分:1)
首先你要知道的是:
Date
始终基于UTC。 如果您想要拥有本地时区,请Date
与Calendar
和/或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);