Java Spring应用程序显示服务器时间而不是客户端时间
这是我的密码:Java Spring应用程序显示服务器时间而不是客户端时间,java,spring,datetime,Java,Spring,Datetime,这是我的密码: @RequestMapping(value="/test", method=RequestMethod.GET) public @ResponseBody String test(HttpServletRequest request) { Calendar calendar = new GregorianCalendar(request.getLocale()); String currentTime = calendar.getTime().toString()
@RequestMapping(value="/test", method=RequestMethod.GET)
public @ResponseBody String test(HttpServletRequest request) {
Calendar calendar = new GregorianCalendar(request.getLocale());
String currentTime = calendar.getTime().toString();
return"Current Time: " + currentTime;
}
这一次是给我看的:
Current Time: Fri Nov 30 22:45:42 UTC 2012
我在中央时区,所以它应该告诉我:
Current Time: Fri Nov 30 14:45:42 CST 2012
为什么我得到的是服务器时间而不是客户端时间?无论客户端在哪里,代码都会在服务器上执行。在服务器上,您将为该机器设置时区,该时区将用于计算时间。调用
calendar.getTime()
时,将使用此时区
如果您想要客户端时区,您需要发送它并使用一些东西将服务器时间转换为客户端时区。这段代码是正确的:
Calendar calendar = new GregorianCalendar(request.getLocale());
它基本上创建了日历的一个实例
:
客户端将根据accept Language标头接受内容的首选区域设置
您的错误在于将日历
转换为日期
:
calendar.getTime()
java.util.Date
类是时区无关的,并且它的默认值总是toString()
实现总是使用系统(您的服务器)时区。如果要在客户端时区中格式化当前服务器时间,请使用以下代码段:
DateFormat df = DateFormat.getDateTimeInstance(
DateFormat.LONG,
DateFormat.LONG,
request.getLocale()
);
df.format(new Date());
最后一点注意:这将在使用客户端时区的服务器上显示时间。这不是在浏览器(操作系统)中设置的客户端时间。为了确定客户端的时区,您需要在HTTP请求中显式发送客户端的当前时间。我建议保留控制器代码以返回UTC时间。然后在视图层或(更好的)在客户端浏览器上执行的javascript代码中转换为客户端时间。这是否应该给我从时区算起的时间?日历=新的GregorianCalendar(request.getLocale());int hour=calendar.get(calendar.hour/OF\u DAY)@user1007895:否,如果发送了
Accept Language
,则应返回浏览器时区中的当前小时