Postman
tilføjer ikke noget til JSON
svar fra en server. Denne repræsentation af en given dato blev genereret af serveren, og der er et problem. For det første bør vi tage udgangspunkt i, at du ikke skal bruge java.util.Date
da du bruger Java8
. Der er java.time
pakke tilgængelig, og du skal bruge den til at repræsentere et tidspunkt.
toString
metode fra Date
klasse bruger standardsystemets tidszone til at udskrive dato, og du bør ikke bruge den. java.time.LocalDateTime
burde virke for dig.
Sandsynligvis bruger din backend-tjeneste nogle biblioteker til at generere JSON
respons. For eksempel Jackson
. Dens konfiguration kan være forkert, det er derfor, du ser forkerte datoer. Se nedenstående kode:
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;
}
Ovenstående kode med tidszone indstillet til GMT
udskrifter:
{
"initialDate" : "2019-03-07T00:00:00",
"finalDate" : "2019-09-07T23:59:59"
}
Men når vi ændrer tidszone til Etc/GMT-3
, den udskriver:
{
"initialDate" : "2019-03-07T00:00:00",
"finalDate" : "2019-09-08T02:59:59"
}
Du bør tjekke, hvad der bruges til at generere JSON
i dit tilfælde og konfigurer korrekt tidszone. Bemærk, at for initialDate
vi kan ikke se denne adfærd, da vi brugte java.time.LocalDateTime
klasse i stedet for Date
.