我在我的系统中使用CST时间,从前端到javascript我今天发送日期到spring控制器.在Spring控制器中通过请求参数我得到了日期并通过@DateTimeFormat注释转换为日期,我得到相同的日期回到视图我得到了我期待的确切日期.
但是,当我通过部署在亚马逊服务器中的测试环境进行测试时.当我通过今天的日期,当我试图获得相同的日期到前端时,它将作为不同的日期.我写了我用过的代码.
使用Javascript:
$http({
method : 'GET',url : urlpath + '/getDate/',params: {
date: new Date().toString("MM/dd/yyyy")
}
}).success(function(response) {
console.log("date is"+response)
}
Java代码:
@RequestMapping(value = "/getdate",method = RequestMethod.GET)
public Date getdate(@RequestParam("date") @DateTimeFormat(pattern ="MM/dd/yyyy") throws Exception {
return date;
}
我本地机器的日期是01-05-2015 23:17
控制台声明是2015年5月1日星期五00:00:00 GMT-0500(中部夏令时)没有hh mm和ss,因为我使用datetimeformat注释裁剪.
在我的测试环境中,我使用相同的代码,但控制台正如下面那样引用
2015年4月30日星期四23:00:00 GMT-0500(中部夏令时)
任何人都可以指出这个问题并告诉我这个问题的根本原因.
最佳答案
时间只有HH:MM:SS就是这样.除非您隐式设置时区,否则Timezone将作为您计算机的默认设置.所以,正如你所看到的,当你只发送时间时,它实际上并不代表什么是实时.
原文链接:https://www.f2er.com/spring/432218.html有两种解决方案.
1)最简单.无论你送什么,都把它扔到同一时区.例如UTC.然后,每当你得到它 – 用它作为时间形式UTC.隐.因此,系统的每个部分都知道发送时间是UTC并相应地采取行动.永远不要将其保留为默认值谁知道你的一台电脑在哪里(什么时区).
2)类似但参数更多.发送2个参数 – 时间和时区.工作方式相同 – 你总是需要投入时间(再次,永远不要使用默认值) – 但是,至少,你知道发送方的实时时间,在这种情况下,你会看到你的测试计算机时区是什么.