gpt4 book ai didi

java - UTC 时间自动添加到我的日期变量中

转载 作者:行者123 更新时间:2023-12-01 19:00:33 25 4
gpt4 key购买 nike

这是我的 json 格式:

"date": "2020-01-01T00:00:00.000Z"

但是,在 java 中,我收到的日期为 Wed Jan 01 05:30:00 IST 2020

以下是我的DTO的代码

public class DateTimeDto {

@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXX")
private Date date;

}

我使用 dateTimeDto.getDate() 接收以 JSON 格式发送的日期。

如何只获取不添加 UTC 的日期?

最佳答案

receive the date sent in JSON format.

不存在日期时间值的 JSON 格式。

This my json format :

“日期”:“2020-01-01T00:00:00.000Z”

末尾的 Z 表示该日期和时间将被视为 UTC,零小时-分钟-秒的偏移量。该文本的格式在 ISO 8601 中定义。 .

解析 Instant 。切勿使用日期。仅使用 java.time 类。

位于 ISO 8601标准格式,无需指定格式模式。

Instant instant = Instant.parse( "2020-01-01T00:00:00.000Z" ) ;

因此,请查看调整到另一个时区的时刻,应用 ZoneId

ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

要知道日期时间对象没有“格式”。您可以生成/解析各种格式的字符串,但日期时间对象是单独且不同的。

only get the date

如果您指的是不带时间的日期部分,则可以在调整到要解释日期的时区后提取 LocalDate。请记住,对于任何特定时刻,全局各地的日期因区域而异。

Instant
.parse( "2020-01-01T00:00:00.000Z" )
.atZone( ZoneId.of( "America/Montreal" ) )
.toLocalDate()

without added UTC?

没有“添加”UTC。您的原始值代表 UTC 中看到的时刻。我们知道这是因为 Z 表示 UTC,发音为“Zulu”。

I sent the JSON DEBUG 5436 --- [nio-8080-exec-2] org.hibernate.SQL : select count(*) from dbo.(table_name) where date = 'Wed Jan 01 05:30:00 IST 2020'

使用智能对象而不是单纯的字符串作为查询中的参数。 Hibernate 和 JDBC 4.2 允许您与数据库交换 java.time 对象。

Table of date-time types in Java (both legacy and modern) and in standard SQL

'Wed Jan 01 05:30:00 IST 2020'

永远不要使用这种糟糕的格式通过文本交换日期时间值。该格式假定为英语,很难被机器解析,使用 2-4 个字符的伪时区,如 IST,它不是标准化的,也不是唯一的(爱尔兰标准时间?印度标准时间?) 。

<小时/>

搜索 Stack Overflow 以获取更多信息。所有这些已经被讨论过很多次了。发布前进行搜索和研究。

关于java - UTC 时间自动添加到我的日期变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59643149/

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