gpt4 book ai didi

java - 为什么前端传递的日期与后端(Java)中传递的日期不一样(以毫秒为单位)

转载 作者:行者123 更新时间:2023-11-30 01:48:43 25 4
gpt4 key购买 nike

我正在开发一个应用程序,前端使用 AngularJS,后端使用 Java(使用 Spring)。
我注意到前端中个人资料实体的显示日期与数据库中的不同。
因此,我调试了保存日期的那一刻,发现在前端(保存日期时 - $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()”函数不应该在前端和后端返回相同的数字,因为它们不依赖于时区?

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

有人知道我能做什么吗?

这是传递的 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 自动完成的。

最佳答案

我认为你误解了日期(在 JavaScript 和 Java 中)的方式取决于时区,我认为 Java 端解析入站日期的方式可能有问题。

在客户端(JavaScript 端),您的(格式化)日期为“2017-10-31T23:00:00.000Z”在后端(Java 端),您的(格式化)日期是“Tue Oct 31 23:00:00 CET 2017”。

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

看起来 Java 端的某些东西正在采用 UTC 格式的日期字符串,忽略时区,并将其按原样反序列化为具有本地 (CET) 时区的 Java 日期。

在将日期插入数据库然后再次检索后,查看后端的日期,为错误所在的位置留下了很多可能性。您必须在反序列化后立即在 Spring Controller 中检查它,然后在到达数据库并再次返回的每一步中检查它,以查看错误的转换在哪里。

关于java - 为什么前端传递的日期与后端(Java)中传递的日期不一样(以毫秒为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56855135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com