sql >> Database teknologi >  >> RDS >> Oracle

POSTMAN returnerer datofelter med ændrede værdier

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 .



  1. mysql SELECT NOT IN () -- disjoint sæt?

  2. SQL-overvågning i SQL-udvikler

  3. Hvordan man kombinerer flere rækker i en enkelt række, orakel

  4. Kan jeg fjerne transienter i wp_options-tabellen for min WordPress-installation?