Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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 服务器端更改客户端发送的日期/时间_Java_Javascript_Angularjs_Playframework_Timezone - Fatal编程技术网

Java 服务器端更改客户端发送的日期/时间

Java 服务器端更改客户端发送的日期/时间,java,javascript,angularjs,playframework,timezone,Java,Javascript,Angularjs,Playframework,Timezone,我面临以下问题,我有一个使用angular和java的play应用程序。在一个页面中,客户端在日历中选择一些日期和时间,例如2015-04-03 15:00此数据作为日期放在JavaScript对象中,稍后将此数据提交给我的服务器,但服务器似乎正在将此日期/时间转换为其时区,并保存2015-04-0316:00,而不是15:00客户端已发送 在我将数据提交到服务器后,当我重新加载数据时,该数据将保存在数据库中,页面显示的日期比原来少1小时 正在向服务器发送数据。请注意,有一个console.in

我面临以下问题,我有一个使用angular和java的play应用程序。在一个页面中,客户端在日历中选择一些日期和时间,例如2015-04-03 15:00此数据作为日期放在JavaScript对象中,稍后将此数据提交给我的服务器,但服务器似乎正在将此日期/时间转换为其时区,并保存2015-04-0316:00,而不是15:00客户端已发送

在我将数据提交到服务器后,当我重新加载数据时,该数据将保存在数据库中,页面显示的日期比原来少1小时

正在向服务器发送数据。请注意,有一个console.info()用于打印日期和时间。它正在打印正确的日期/时间。用户选择的日期/时间

$scope.confirmCallback = function () {
                $scope.schedule.client = $scope.client;
                $scope.schedule.type = 'CONTACT';
                console.info($scope.schedule.date); //PRINTS OK DATE/TIME
                ScheduleRepository.create($scope.schedule).then(function () {
                    Alert.success('views.schedule.message.successSaved');
                    $scope.schedule = {};
                    $scope.tableSchedules.reload();
                }, function () {

                });
            }
在我的服务器端,有一个接收请求的控制器。如果我检查json,当请求到达服务器时,我可以看到日期时间值与我发送的日期时间值不同。我想这和客户端和服务器端的时区有关

@Dynamic("CREATE_SCHEDULE, EDIT_SCHEDULE")
public static Result save() {
    try {
        JsonNode request = request().body().asJson();//SHOWS DIFFERENT DATE/TIME
        ScheduleClient scheduleClient = JSONUtils.fromJson(request, ScheduleClient.class);

如何解决这个问题有什么建议吗?提前感谢

需要了解的几件事:

  • Date
    对象不能通过网络发送。它必须被序列化
  • JSON没有本机日期序列化格式,但最佳实践惯例是发送/序列化字符串
  • JS
    Date
    对象在其运行的时区上。因此,如果您在其上调用
    toISOString
    (或者如果您的
    ScheduleRepository
    调用),它将使用该时区转换为UTC
  • 在接收端,您的
    JSONUtils.fromJson
    调用将字符串值反序列化回您的
    ScheduleClient
    类使用的任何对象结构
  • 如果该对象也具有本地时间行为,则它将使用服务器的本地时区
因此,您可以通过将本地值与UTC值进行比较,或者通过将本地时间值与另一时区的本地时间进行比较来看到时差


很难就应该做什么给出更准确的建议,因为您没有显示代码的重要部分。我们需要查看
Date
对象的原始赋值、序列化代码、通过线路发送的字符串值、反序列化代码以及反序列化到的类结构。我们还需要一些上下文来了解您的用户是在某个特定的通用瞬间选择日期和时间,还是根据时区日期和时间选择某个特定的本地日期和时间,或者只是日历日期,或者是什么。上下文是关键,您没有提供太多内容。

不清楚发送到服务器的是什么,日期还是字符串表示。这会有所不同。还有,发球改变的证据是什么。问题还不清楚。请提供一些代码。@Ignaus是发送到服务器的日期。具有上述值的java脚本对象日期。当发球者得到日期时,不知何故,发球者改变了发送的日期。我还添加了有关该问题的更多信息。@redge我添加了有关该问题的更多信息。我希望它能让我更清楚这就是为什么我要你的一些代码。问题可能是服务器将POST请求中的时间转换为java时间对象,甚至是在客户端之前。谢谢您的帮助。我必须像你说的那样做。我将日期作为字符串发送,并在服务器端转换为日期。这样我就不再有时区的问题了。