Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring应用程序显示服务器时间而不是客户端时间_Java_Spring_Datetime - Fatal编程技术网

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
,则应返回浏览器时区中的当前小时