sql >> Databasteknik >  >> RDS >> Oracle

POSTMAN returnerar datumfält med ändrade värden

Postman lägger inte till något i JSON svar från en server. Denna representation av ett givet datum genererades av servern och det finns ett problem. För det första bör vi utgå från att du inte ska använda java.util.Date eftersom du använder Java8 . Det finns java.time paketet tillgängligt och du bör använda det för att representera en tid.

toString metod från Date klass använder standardsystemets tidszon för att skriva ut datum och du bör inte använda den. java.time.LocalDateTime borde fungera för dig.

Förmodligen använder din backend-tjänst vissa bibliotek för att generera JSON svar. Till exempel, Jackson . Dens konfiguration kan vara fel, det är därför du ser fel datum. Se nedan kod:

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;
}

Ovanstående kod med tidszon inställd på GMT utskrifter:

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

Men när vi ändrar tidszon till Etc/GMT-3 , den skriver ut:

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

Du bör kontrollera vad som används för att generera JSON i ditt fall och konfigurera korrekt tidszon. Observera att för initialDate vi ser inte detta beteende eftersom vi använde java.time.LocalDateTime klass istället för Date .



  1. Hur använder man mysqli_query() i PHP?

  2. Spara utdata från en dynamisk fråga som använder refcursor i en tabell

  3. PHP fyller i data från databasen när District är valt

  4. Enklaste sättet att kopiera en MySQL-databas?