Skip to content

angular json zeitzonen

andrewinkler edited this page Oct 10, 2019 · 7 revisions

Angular, JSON und das Zeitzonenproblem

Eine immer wieder kehrende Frage innerhalb einer REST-Anwendung. Wie übergebe ich Datum und Zeitstempel an das Frontend? Es gibt folgende Spielarten:

  • Als vorformatierter String. Dann eröffnet sich die Frage, welches Format soll angewendet. Soll gleich das Ausgabeformat verwendet werden? Oder eher Javascript freundlich?
  • Als Unix Timestamp in Millisekunden.

Das Beispiel Projekt findet sich auf Github: Springboot Demo. Die Anwendung mit git clonegit@github.com:gluehloch/springboot-demo.git und mvn clean package bauen. Im Anschluss das gepackte Jar mit java -jar ./target/restdemo-1.0.jar starten. Unter der Adresse http://localhost:8080/demo/ping findet sich die Response mit verschiedenen Datumsformaten. Mit der Annotation @JsonFormat wird der Serialisierungsprozess gesteuert. Fehlt die Annotation, versucht der Serialisierer Jackson eine Dekonstruktion. Im Falle von java.util.Date werden die Millisekunden (Unix-Timestamp) zurück geliefert.

RestController:

@RestController
@RequestMapping("/demo")
public class DateTimeController {

    @GetMapping("/ping")
    public PingDateTime ping() {
        PingDateTime pdt = new PingDateTime();
        pdt.setDateTime(new Date());
        return pdt;
    }

}

JSON Objekt

public class DateTimeJson {
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd.MM.yyyy HH:mm", locale = "de_DE", timezone = "Europe/Berlin")
    private Date dateTimeBerlin;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd.MM.yyyy HH:mm", locale = "de_DE", timezone = "UTC")
    private Date dateTimeUtc;

    private DateTime jodaDateTime;
    
    private Date dateTimeMillies;

    // getter and setters...
}
{{tippModel.round.dateTime | date: 'dd.MM.yyyy HH:mm': '+0000'}}

Information über den Unix Zeitstempel:

Clone this wiki locally