我想返回当前服务器时间,包括时区设置。 目前我这样做。
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}
答案 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"> </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));