-
Notifications
You must be signed in to change notification settings - Fork 0
angular json zeitzonen
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 den verschiedenen
Datumsformaten wieder. Die Anwendung verwendet Spring-Boot bzw. das eingebaute Jackson für die
Serialisierung/Deserialisierung von Objekten.
@RestController
@RequestMapping("/demo")
public class DateTimeController {
@GetMapping("/ping")
public PingDateTime ping() {
PingDateTime pdt = new PingDateTime();
pdt.setDateTime(new Date());
return pdt;
}
}
Mit der Annotation @JsonFormat wird der Serialisierungsprozess gesteuert.
Out-of-the-box funktioniert die Annotation nur mit den Java Datentyp java.util.Date
und java.time.LocalDate bzw. java.time.LocalDateTime. Für den Joda org.joda.time.DateTime
Datentyp gibt es auf GitHub eine
Extension für Jackson.
Fehlt die Annotation, versucht der Serialisierer Jackson
eine Dekonstruktion. Im Falle von java.util.Date werden die Millisekunden (Unix-Timestamp)
zurück geliefert. Das Joda DateTime Objekt
erfährt bei der Serialisierung eine detailreiche Auflösung.
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;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd.MM.yyyy HH:mm", locale = "de_DE", timezone = "UTC")
private LocalDateTime localDateTimeUTC;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd.MM.yyyy HH:mm", locale = "de_DE", timezone = "Europe/Berlin")
private LocalDateTime localDateTimeBerlin;
private LocalDateTime localDateTime;
// getter and setters...
}
{{tippModel.round.dateTime | date: 'dd.MM.yyyy HH:mm': '+0000'}}
Information über den Unix Zeitstempel:
- Unix Zeitstempel Also die Zeit in Millisekunden seit dem 01.01.1970. Das funktioniert bis zum 19.01.2038. Also bereits in weniger als 20 Jahren werden wir einige Probleme bekommen.
- Unterschied von UTC zu GMT
by Andre Winkler 2021, Hamburg