sql >> Database >  >> RDS >> Oracle

POSTMAN retourneert datumvelden met gewijzigde waarden

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 .



  1. MySQL - Unieke externe sleutel

  2. geef parameters door in de procedure voor het invoegen van query's in laravel 4

  3. Hoe PG::DuplicatePstatement:FOUT op te lossen?

  4. postgreSQL Fibonacci-reeks - Query heeft geen bestemming voor resultaatgegevens