Oracle
 sql >> Datenbank >  >> RDS >> Oracle

POSTMAN gibt Datumsfelder mit geänderten Werten zurück

Postman fügt JSON nichts hinzu Antwort von einem Server. Diese Darstellung des angegebenen Datums wurde vom Server generiert und es liegt ein Problem vor. Zunächst sollten wir davon ausgehen, dass Sie java.util.Date nicht verwenden sollten da Sie Java8 verwenden . Es gibt java.time Paket verfügbar und Sie sollten es verwenden, um eine Zeit darzustellen.

toString Methode von Date Die Klasse verwendet die Zeitzone des Standardsystems, um das Datum zu drucken, und Sie sollten sie nicht verwenden. java.time.LocalDateTime sollte für Sie funktionieren.

Wahrscheinlich verwendet Ihr Back-End-Dienst einige Bibliotheken, um JSON zu generieren Antwort. Beispiel:Jackson . Die Konfiguration könnte falsch sein, deshalb sehen Sie falsche Daten. Siehe folgenden 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;
}

Obiger Code mit auf GMT eingestellter Zeitzone druckt:

{
  "initialDate" : "2019-03-07T00:00:00",
  "finalDate" : "2019-09-07T23:59:59"
}

Aber wenn wir die Zeitzone auf Etc/GMT-3 ändern , es druckt:

{
  "initialDate" : "2019-03-07T00:00:00",
  "finalDate" : "2019-09-08T02:59:59"
}

Sie sollten überprüfen, was zum Generieren von JSON verwendet wird in Ihrem Fall und konfigurieren Sie die Zeitzone richtig. Beachten Sie, dass für initialDate Wir sehen dieses Verhalten nicht, da wir java.time.LocalDateTime verwendet haben Klasse statt Date .