Postman
voegt niets toe aan JSON
reactie van een server. Deze weergave van de opgegeven datum is gegenereerd door de server en er is een probleem. Ten eerste moeten we ervan uitgaan dat u java.util.Date
niet moet gebruiken aangezien je Java8
. gebruikt . Er is java.time
pakket beschikbaar en u moet het gebruiken om een tijd weer te geven.
toString
methode van Date
class gebruikt de tijdzone van het standaardsysteem om de datum af te drukken en u zou deze niet moeten gebruiken. java.time.LocalDateTime
zou voor u moeten werken.
Waarschijnlijk gebruikt uw backend-service enkele bibliotheken om JSON
te genereren antwoord. Bijvoorbeeld Jackson
. De configuratie kan verkeerd zijn, daarom ziet u verkeerde datums. Zie onderstaande code:
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;
}
Bovenstaande code met tijdzone ingesteld op GMT
afdrukken:
{
"initialDate" : "2019-03-07T00:00:00",
"finalDate" : "2019-09-07T23:59:59"
}
Maar als we de tijdzone veranderen in Etc/GMT-3
, het drukt af:
{
"initialDate" : "2019-03-07T00:00:00",
"finalDate" : "2019-09-08T02:59:59"
}
U moet controleren wat wordt gebruikt om JSON
te genereren in uw geval en configureer de tijdzone correct. Merk op dat voor initialDate
we zien dit gedrag niet omdat we java.time.LocalDateTime
hebben gebruikt klasse in plaats van Date
.