Postman
tidak menambahkan apa pun ke JSON
tanggapan dari server. Representasi tanggal yang diberikan ini dihasilkan oleh server dan ada masalah. Pertama, kita harus mulai dari bahwa Anda tidak boleh menggunakan java.util.Date
karena Anda menggunakan Java8
. Ada java.time
paket tersedia dan Anda harus menggunakannya untuk mewakili waktu.
toString
metode dari Date
class menggunakan zona waktu sistem default untuk mencetak tanggal dan Anda tidak boleh menggunakannya. java.time.LocalDateTime
harus bekerja untuk Anda.
Mungkin layanan backend Anda menggunakan beberapa perpustakaan untuk menghasilkan JSON
tanggapan. Misalnya, Jackson
. Konfigurasinya bisa salah, inilah mengapa Anda melihat tanggal yang salah. Lihat kode di bawah ini:
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;
}
Kode di atas dengan zona waktu diatur ke GMT
cetakan:
{
"initialDate" : "2019-03-07T00:00:00",
"finalDate" : "2019-09-07T23:59:59"
}
Tetapi ketika kita mengubah zona waktu menjadi Etc/GMT-3
, ia mencetak:
{
"initialDate" : "2019-03-07T00:00:00",
"finalDate" : "2019-09-08T02:59:59"
}
Anda harus memeriksa apa yang digunakan untuk menghasilkan JSON
dalam kasus Anda dan konfigurasikan zona waktu dengan benar. Perhatikan, bahwa untuk initialDate
kami tidak melihat perilaku ini karena kami menggunakan java.time.LocalDateTime
kelas bukannya Date
.