簡體   English   中英

如何指示Spring Boot使用UTC時區作為日期參數?

[英]How do I indicate to Spring Boot to use UTC time zone for date parameters?

我有以下API

public ResponseEntity<ResponseDataToSeller> getTrackingDataByDate(@RequestBody RequestBodyBySeller requestBodyBySeller) {
    System.out.println(requestBodyBySeller.getEndDate());
    System.out.println(requestBodyBySeller.getEndDate().getDate());
    System.out.println(requestBodyBySeller.getEndDate().getHours());

public class RequestBodyBySeller {
    @ApiModelProperty(dataType="Date", notes = "endDate",required = true)
    Date endDate;

當我使用"endDate": "2018-10-11"發出請求時,它會打印

2018-10-11 16:54:45.897  INFO 11996 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 3 ms
Wed Oct 10 20:00:00 EDT 2018
10
20

因為我正在測試hit_date <= #{endDate}所以這弄亂了SQL查詢。 它應該從2018-10-11返回結果,但不是,因為Spring Boot將日期解釋為2018-10-10。 將日期參數解析為API時,如何讓Spring Boot使用UTC時區?

Spring Boot 1.5.13,MyBatis 3.4.5,MyBatis Spring 1.3.1

使用本地日期 ,問題在於當涉及到日期時,java嘗試將日期轉換為服務器時區,因為未指定時區,因此需要花費UTC時間,然后才進行轉換,LocalDate不包含時區信息,因此,日期將按原樣進行解析。

抱歉,忘記了,要處理本地日期時間,您需要使用jackson-datatype-jsr310 然后,如示例所示,您可以使用以下注釋類:

@JsonFormat(pattern = "dd/MM/yyyy")
@JsonDeserialize(using = LocalDateDeserializer.class)
@JsonSerialize(using = LocalDateSerializer.class)
private LocalDate birthdate;*

使用springboot時,有一些方法可以在springmvc中定義傑克遜功能。

  1. 使用屬性。 spring.jackson.xxxx 如您要設置時區。 application.properties使用添加spring.jackson.time-zone=xxx

  2. 定義一個實現Jackson2ObjectMapperBuilderCustomizer的Spring bean

  3. 您可以在spring中根據需要直接創建ObjectMapper bean。

我將類更改為java.time.LocalDate並添加了此依賴項

    <!-- For LocalDate to be deserialized using ISO format -->
    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
    </dependency>

https://stackoverflow.com/a/46884603/148844

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM