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 ạ
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. @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 ạ:
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 :
hoặc config trong file properties :
là được anh ạ.
Không biết mọi người đã gặp trường hợp như này chưa ạ.
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.