Postman
không thêm bất cứ thứ gì vào JSON
phản hồi từ máy chủ. Bản trình bày về ngày cụ thể này được tạo bởi máy chủ và đã xảy ra sự cố. Đầu tiên, chúng ta nên bắt đầu từ đó bạn không nên sử dụng java.util.Date
vì bạn sử dụng Java8
. Có java.time
gói có sẵn và bạn nên sử dụng nó để đại diện cho thời gian.
toString
phương thức từ Date
lớp sử dụng múi giờ của hệ thống mặc định để in ngày tháng và bạn không nên sử dụng nó. java.time.LocalDateTime
sẽ làm việc cho bạn.
Có thể dịch vụ phụ trợ của bạn sử dụng một số thư viện để tạo JSON
phản ứng. Ví dụ:Jackson
. Cấu hình của nó có thể bị sai, đây là lý do tại sao bạn thấy sai ngày. Xem mã bên dưới:
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.TimeZone;
public class JsonTimeApp {
public static void main(String[] args) throws IOException {
LocalDateTime initialDate = LocalDateTime.of(2019, 3, 7, 0, 0, 0);
LocalDateTime finalDate = LocalDateTime.of(2019, 9, 7, 23, 59, 59);
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.INDENT_OUTPUT);
mapper.registerModule(new JavaTimeModule());
mapper.setTimeZone(TimeZone.getTimeZone("GMT"));
// or mapper.setTimeZone(TimeZone.getTimeZone("Etc/GMT-3"));
mapper.writeValue(System.out, new Period(initialDate, Date.from(finalDate.toInstant(ZoneOffset.UTC))));
}
}
@Data
@AllArgsConstructor
@ToString
class Period {
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
private LocalDateTime initialDate;
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
private Date finalDate;
}
Mã trên với múi giờ được đặt thành GMT
bản in:
{
"initialDate" : "2019-03-07T00:00:00",
"finalDate" : "2019-09-07T23:59:59"
}
Nhưng khi chúng tôi thay đổi múi giờ thành Etc/GMT-3
, nó in:
{
"initialDate" : "2019-03-07T00:00:00",
"finalDate" : "2019-09-08T02:59:59"
}
Bạn nên kiểm tra những gì được sử dụng để tạo JSON
trong trường hợp của bạn và định cấu hình đúng múi giờ. Lưu ý, điều đó cho initialDate
chúng tôi không thấy hành vi này vì chúng tôi đã sử dụng java.time.LocalDateTime
lớp thay vì Date
.