有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java UTC时间将自动添加到my date变量中

这是我的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


共 (1) 个答案

  1. # 1 楼答案

    receive the date sent in JSON format.

    日期时间值没有JSON格式

    This my json format :

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

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

    解析一个an^{}。永远不要使用Date。只使用java。时间课程

    由于采用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和JDBC4.2允许您交换java。数据库中的时间对象

    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,这不是标准化的,也不是唯一的(爱尔兰标准时间?印度标准时间?)


    有关详细信息,请搜索堆栈溢出。所有这些都已经被讨论过很多次了。发布前进行搜索和研究