ZoneDateTime.getTimeZone()不是我设置的

时间:2016-04-07 08:08:37

标签: java datetime timezone

我想返回当前服务器时间,包括时区设置。 目前我这样做。

  private void handleGetTimeDate(User_Itf user, HttpServletRequest request, HttpServletResponse response) throws IOException, ServiceException {
    JSONObject time = new JSONObject();
    time.put("hour", ZonedDateTime.now().getHour());
    time.put("minute", ZonedDateTime.now().getMinute());
    time.put("second", ZonedDateTime.now().getSecond());
    time.put("year", ZonedDateTime.now().getYear());
    time.put("month", ZonedDateTime.now().getMonthValue());
    time.put("day", ZonedDateTime.now().getDayOfMonth());
    time.put("zone", Calendar.getInstance().getTimeZone().getID());
    response.getWriter().print(time);
    response.setStatus(HttpServletResponse.SC_OK);
    }

在另一种方法中,我使用timedatectl -setTimezone成功设置了服务器时区。我甚至在设置时区时开始Calendar.getInstance().setTimeZone(TimeZone.getTimeZone(dateString));,希望它会更新日历。更改时区后,handleGetTimeDate方法仍然返回旧的TimeZone和时间,现在错误的偏移量。 有时突然,该方法返回实际设置的时区,但我还无法弄清楚行为。 有没有人对如何解决这个问题有一些想法,并且总是得到实际设定的时区?

更新

这是终端的结果:

root@dev-ru1:~# timedatectl
      Local time: Wed 2017-06-07 21:26:55 ART
  Universal time: Thu 2017-06-08 00:26:55 UTC
        RTC time: Thu 2017-06-08 00:26:51
       Time zone: America/Argentina/Tucuman (ART, -0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

这就是我从Java方法中获得的原因:

 {"hour":21,"month":6,"year":2017,"zone":"America/Belem","day":7,"minute":30,"second":35}

2 个答案:

答案 0 :(得分:1)

你应该避免多次调用#wrapper { height: 900px; width: 900px; border: solid;black; margin-left: auto; margin-right: auto; } #repicon { background-image: url(http://i.imgur.com/Ow7TR.png); background-size: 140px 140px; }(为了表现,但更重要的是一致性原因:想象你在午夜之前运行方法,小时被视为23但是当你读到这一天时,它已经过了午夜。

此外,无需将java time API与旧版Calendar类混合使用。

<DOCTYPE html>
<html>
<head>
	<title>2016 Election</title>
	<meta name="keywords" content="Donald Trump, Bernie Sanders, Ted Cruz, Hillary Clinton, 2016 Elections, 2016 Primaries, Republican, Democrat"> 
	<meta name="description" content="2016 Presidential Election, Primary Nominations">
     <link rel="stylesheet" href="style.css">
</head>
<body>
<div id="Wrapper">
<div id="repicon">&nbsp</div>
</div>

</body>
</html>

请注意,ZonedDateTime.now()使用系统时区which should change if you update it

  

如果更改了系统默认时区,则此方法的结果也将更改。

答案 1 :(得分:1)

Tomcat-Server(版本8.0.x)显然捕获了TimeZone设置。这意味着Tomcat本身只会在重新启动时更新设置。

如果您想在不重启的情况下更改TimeZone,则需要在tomcat环境中手动设置新时区。

这可以这样做: TimeZone.setDefault(TimeZone.getTimeZone(dateString));