Postman
n'ajoute rien à JSON
réponse d'un serveur. Cette représentation de la date donnée a été générée par le serveur et il y a un problème. Tout d'abord, nous devrions commencer par le fait que vous ne devez pas utiliser java.util.Date
puisque vous utilisez Java8
. Il y a java.time
package disponible et vous devez l'utiliser pour représenter une heure.
toString
méthode de Date
classe utilise le fuseau horaire par défaut du système pour imprimer la date et vous ne devez pas l'utiliser. java.time.LocalDateTime
devrait fonctionner pour vous.
Votre service backend utilise probablement certaines bibliothèques pour générer JSON
réponse. Par exemple, Jackson
. Sa configuration peut être erronée, c'est pourquoi vous voyez des dates erronées. Voir le code ci-dessous :
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;
}
Au-dessus du code avec le fuseau horaire défini sur GMT
imprime :
{
"initialDate" : "2019-03-07T00:00:00",
"finalDate" : "2019-09-07T23:59:59"
}
Mais lorsque nous changeons de fuseau horaire en Etc/GMT-3
, il affiche :
{
"initialDate" : "2019-03-07T00:00:00",
"finalDate" : "2019-09-08T02:59:59"
}
Vous devriez vérifier ce qui est utilisé pour générer JSON
dans votre cas et configurez correctement le fuseau horaire. Notez que pour initialDate
nous ne voyons pas ce comportement puisque nous avons utilisé java.time.LocalDateTime
classe au lieu de Date
.