为什么前端的通过日期与ms中的后端(Java)中的日期不同

Cold_Class:

我正在使用前端的AngularJS和后端的Java(带有Spring)开发应用程序。
我注意到profile前端显示的-entity 日期与数据库中显示的日期不同
因此,我调试了保存日期的时间,发现在前端(保存日期的正确时间- $scope.selectedProfile.$save)中,日期具有以下值:

$scope.selectedProfile.projects[1].start -> Date: 2017-10-31T23:00:00.000Z
$scope.selectedProfile.projects[1].start.getTime() -> 1509490800000

接下来,我在返回行到达后端的断点:

@RestController
@RequestMapping(value = "/profiles", produces = MediaType.APPLICATION_JSON_VALUE)
public class ProfileController {

  @RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
  public Profile update(@RequestBody Profile profile) {
      return this.repository.save(profile);
  }

}

该日期具有以下值:

profile.projects.get(1).start -> (Date) “Tue Oct 31 23:00:00 CET 2017”
profile.projects.get(1).start.getTime() -> 1509487200000

问题不是已经在这里发生了吗?-因为“ getTime()”函数不依赖于时区,所以不应该在前端和后端都返回相同的数字吗?

问题是,即使前端中显示的日期是11月1日,当我将值导出到Word文件并显示它写“ October”的月份时。

有谁知道我可以做什么?

这是传递的JSON:

{
  "id": 64,
  "projects": [
    {
      "id": 135,
      "project": 339,
      "start": null,
      "end": null
    },
    {
      "id": 132,
      "project": 403,
      "start": "2017-10-31T23:00:00.000Z",
      "end": null
    }
  ]
}

数据通过以下代码传递:

$http.post('/profiles/profiles', profile)

我认为映射是由Spring自动完成的。

GreyBeardedGeek:

我认为您误解了日期(在JavaScript和Java中)如何依赖时区,并且我认为在Java端解析入站日期的方式可能不正确。

在客户端(JavaScript端),您的(格式化)日期是'2017-10-31T23:00:00.000Z';在后端(Java端),您的(格式化)日期是'星期二10月31日23:00 :00 CET 2017'。

请注意,这两个日期表示相隔一个小时(或2,具体取决于DST)的时刻。日期和时间部分是等效的,但JavaScript日期以UTC表示,而Java日期显示CET时区。由于CET取决于DST是UTC + 1还是UTC + 2,因此它们并不相同。

看起来Java方面的事情是采用UTC格式的日期字符串,忽略时区,然后将其按原样反序列化为具有本地(CET)时区的Java Date。

在将后端插入数据库然后再次检索之后,在后端查看日期,这为错误的位置留下了很多可能性。在将其反序列化之后,您必须立即在Spring Controller中对其进行检查,然后在进入数据库的每个步骤中再次进行检查,以查看错误的转换在哪里。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么日期值在Javascript中不同

数据库中的相同日期使用不同的 UTC 偏移量从后端到前端

为什么日期在输出txt文件中的书写方式不同?

为什么Internet Explorer和Chrome中的计算日期不同?

为什么是有日期LOCALDATE的在java中简单inbult conveter?

加快 Access 前端与 SQL Server 后端中整数日期的比较

为什么这些日期不同?

为什么字符串中的Javascript日期不同于Date对象中的相同日期

为什么unlist()杀死R中的日期

为什么在使用Case作为日期的MS SQL中,列名未捕获占位符?

日期显示在Java中的不同语言环境?

Java / Kotlin:为什么Jackson解析日期与SimpleDateFormat不同?

为什么 Spark SQL 中的 FROM_UNIXTIME 返回不同的日期/时间?

为什么 APEX 和 Oracle SQL Developer 中的日期格式不同?

如何通过Java在SQLite中插入日期

通过Java在MongoDB文档中插入日期

在AngularJS前端中对日期进行排序

通过Month SQL计算时间戳中的不同日期

MS SQL中的日期差异

在cpanel中的Java中以angular部署前端和后端

为什么存储日期与创建/记录的日期不同?

JavaScript日期:为什么这两个日期不同?

为什么github“提交日期”和提交日期不同?

前端或后端中的数组排序

laravel中的后端/前端分离

为什么使用SimpleDateFormat从字符串中解析日期时得到错误的结果?(Java)

为什么在Java 8中不适合进行以下日期转换?

为什么1942/4/3 00:00:00在java.util.Calendar中是非法日期?

在Java中为什么有这么多的日期和时间处理功能