Power Apps ist eine großartige Technologie zur Erstellung von Anwendungen im Unternehmenskontext. Wird in der App mit Uhrzeiten gearbeitet, kann aber schnell Chaos entstehen, wenn Mitarbeiter:innen aus mehreren Zeitzonen die App verwenden.
Ein Beispiel: ein deutsches Unternehmen erfasst Zeitenrückmeldungen über eine Power App. Die Zeitenrückmeldungen werden in einer SQL-Datenbank in einem Feld als Text abgespeichert. Die Zeiten sollen nach deutscher Zeit, als mitteleuropäische Standardzeit (MEZ) abgespeichert werden.
Solange sich die Mitarbeiter in Deutschland aufhalten, ist das kein Problem. Wenn jedoch ein Mitarbeiter seine Zeitaufzeichnungen in einer anderen Zeitzone erfassen möchte, wird es innerhalb einer Canvas App schwierig.
Der Mitarbeiter unseres Kunden arbeitet von Japan aus. Wir befinden uns in der MEZ (für die Sommerzeit UTC+02:00, für die Winterzeit UTC+01:00) und der Mitarbeiter in der Tokio-Zeitzone von Japan (UTC+09:00). Weder UTC noch Japan kennen eine Umstellung zwischen Sommer- und Winterzeit – und das ist ein Problem, denn die MEZ schon.
Aber darauf kommen wir etwas später zurück. In Power Apps (genauer gesagt: Canvas Apps) können wir eine Reihe von Formeln verwenden, um mit Zeit und Datum zu arbeiten, und die sehen wir uns erst einmal an.
Aktuelles Datum und aktuelle Uhrzeit
Aktuelle Datum- und Uhrzeitangaben können wir mit der Funktion Now() ermitteln.
Now() gibt das aktuelle Datum und die Uhrzeit zurück, wie sie vom Browser auf dem Gerät des Benutzers bereitgestellt werden, z. B. „4/10/2024 08:24:51“.
Die Now() Funktion
Wollen wir das Datum oder die Uhrzeit in einem bestimmten Format anzeigen lassen, wird mit der Funktion Text() und/oder DateTimeFormat gearbeitet.
Text(Now(), “yyyy-mm-dd hh:mm“)
Text(Now(), DateTimeFormat.LongDateTime24)
Text(Now(), “yyyy-mm-dd hh:mm“)
Text(Now(), DateTimeFormat.LongDateTime24)
Hier sind weitere Beispiele für das Formatieren:
Unser Mitarbeiter in Japan hat sein Smartphone auf japanische Zeit eingestellt. Now() gibt in der Canvas App also die lokale Zeit des Mitarbeiters zurück. Nächster Schritt für das Umwandeln in eine bestimmte Zeitzone ist das Konvertieren der aktuellen Datum- & Uhrzeitangabe in UTC (=0). Aus UTC wiederum können wir dann in MEZ konvertieren.
Konvertierung in UTC
Hier verwenden wir die Funktion TimeZoneOffset().
Die Formel gibt die Differenz zwischen dem angegebenen Datum und der UTC-Zeitzone (UTC = 0) zurück. Sie kann mit der Funktion DateAdd() kombiniert werden, um das angegebene Datum und die Uhrzeit in UTC zu konvertieren:
DateAdd(Now(), TimeZoneOffset(), TimeUnit.Minutes)
Kovertierung in UTC
Jetzt haben wir die aktuelle Datum- und Uhrzeitangabe für UTC = 0. Wir benötigen aber die Zeitzone für Deutschland.
Übrigens: Um aus der UTC-Zeitzone wieder heraus zu konvertierten, kann mit der Funktion TimeZoneOffset() gearbeitet werden. Damit könnten wir z.B. aus UTC in die lokale Zeit des Mitarbeiters konvertieren, also die aktuelle Zeit in Tokio. Wir wollen aber die Zeit aus Tokio in die MEZ-Zeit konvertieren.
Konvertierung aus UTC
Hier wird durch das Hinzufügen eines negativen Wertes von der angegebenen Uhrzeit das TimeZoneOffset subtrahiert. Die Formel sieht folgendermaßen aus:
DateAdd(StartTime, −TimeZoneOffset( StartTime ), TimeUnit.Minutes)
Die Variable locDateTimeUTC wurde mit der Formel zur Konvertierung in UTC gesetzt.
Konvertierung aus UTC
Die Konvertierung von und nach UTC scheint kein Problem zu sein, aber was dann?
Das Problem tritt auf, wenn wir eine Zeit und ein Datum einer Zeitzone in eine Zeit und ein Datum einer anderen Zeitzone umwandeln wollen.
Konvertierung in Canvas Apps
Die Umrechnung in MEZ ist knifflig: Die MEZ kennt die Sommerzeit, die in Tokio verwendete Zeitzone hingegen nicht. Während der Sommerzeit beträgt der Zeitunterschied zwischen MEZ und UTC +2 Stunden anstelle von +1. Wenn wir die Sommerzeit ignorieren würden, könnten wir diese Berechnung in unserer Canvas Anwendung einfach hart codieren. Aber wir wollen das sauber machen, deshalb bringt uns das nichts 🙂
Um dieses Problem zu lösen, müssen wir mit Power Automate arbeiten.
Konvertierung mittels Power Automate Cloud Flow
Im Gegensatz zu Power Apps unterstützt Power Automate die Konvertierung in eine definierte Zielzeitzone.
Deshalb verwenden wir folgenden Ausdruck, um eine gegebene Zeit von UTC in z.B. die Mitteleuropäische Standardzeit zu konvertieren. Dazu können wir die Expression „convertTimeZone“ verwenden.
convertTimeZone(‚2024-04-10T06:24:00.0000000Z, ‚UTC‘, ‘W. Europe Standard Time‘, ‘D’)
Der erste Wert in der Funktion wird von der Canvas App aus mitgegeben. Das ist also die Zeit in Tokio, die in UTC konvertiert wurde. Danach wird definiert aus welcher und in welche Zeitzone diese Datums- und Uhrzeitangabe konvertiert werden soll: bei uns also von UTC in MEZ (oder „W. Europe Standard Time“ in unserer Expression).
Konvertierung Zeitzone mit Power Automate
Wir müssen beachten, dass „W. Europe Standard Time“ die Windows-Zeitzone für Deutschland ist. Eine vollständige Liste ist hier zu finden: https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-time-zones?view=windows-11
Als Ergebnis des Flows erhalten wir für die Tokyo Standard Zeitzone folgende Datum-& Uhrzeitangabe: 10.04.2024 15:24.
Damit können wir die Schleife schließen:
In Power Apps können wir die Zeit direkt aus der Tokio-Zeitzone in UTC umrechnen. Diese UTC-Zeit können wir dann an Power Automate weitergeben. In Power Automate können wir die UTC-Zeit in eine beliebige Zielzeitzone konvertieren. Power Automate berücksichtigt dabei auch Sommer- und Winterzeit.
Ja, es ist etwas aufwändiger, eine App zu erstellen, die über mehrere Zeitzonen sauber funktioniert, vor allem, weil wir zusätzlich einen Power Automate Flow einbinden müssen. Aber: damit bekommen wir sauber die Konvertierung zwischen allen möglichen Zeitzonen unter Berücksichtigung von Sommer- und Winterzeit hin.