TapHome

Datum und Uhrzeit

Funktionen der TapHome-Skripte für Datum und Uhrzeit — NOW, DATETIME, DATETIMEADD, TIMESPAN und LOCALTIMEZONE — und die Eigenschaften von Werten datetime und timespan.

Funktionen für Datum und Uhrzeit erzeugen Werte datetime (ein Zeitpunkt) und timespan (eine Zeitdauer). Sie funktionieren in jedem Skript — smart rules, Benachrichtigungen, Modbus und Packet Parser — und verwenden die Zeitzone der Steuereinheit. Alle Funktionen auf dieser Seite benötigen Core 2022.2 oder neuer.

NOW

NOW gibt das aktuelle Datum und die aktuelle Uhrzeit der Steuereinheit als Wert datetime zurück — standardmäßig in Ortszeit, mit NOW(Utc) in UTC.

1
2
NOW()
NOW(kind)
NameTypBeschreibung
kindDateTimeKind, optionalLocal (Standard) oder Utc. NOW(DateTimeKind.Utc) ist dasselbe wie NOW(Utc).

Hinweise — Eine Eigenschaft lässt sich nicht direkt aus einem Funktionsaufruf lesen: NOW().HOUR wird beim Speichern des Skripts abgelehnt. Speichern Sie den Wert zuerst in einer Variablen.

Beispiel

VAR now := NOW();
now.HOUR;
# Result: the current hour, 0 to 23

Siehe auch — DATETIME, Eigenschaften von Werten datetime.

DATETIME

DATETIME erstellt einen Wert datetime aus seinen Teilen, aus Text oder aus einer Anzahl Millisekunden; ohne Argumente aufgerufen gibt es 1.1.0001 00:00 zurück, nicht die aktuelle Zeit — dafür verwenden Sie NOW.

1
2
3
4
5
DATETIME(year, month, day [, hour [, minute [, second [, millisecond [, kind]]]]])
DATETIME(text [, format])
DATETIME(text, kind)
DATETIME(milliseconds [, kind])
DATETIME()
NameTypBeschreibung
year, month, dayZahlNur gemeinsam anzugeben. Weggelassene Zeitteile sind 0.
hour … millisecondZahl, optionalUhrzeit.
kindDateTimeKind, optionalLocal (Standard) oder Utc.
textstringDatum und Uhrzeit als Text.
formatstring, optional.NET-Format von text, zum Beispiel "dd.MM.yyyy HH:mm".
millisecondsZahlMillisekunden seit 1.1.0001 — die Skala der Eigenschaft TICKS, keine Unix-Zeit.

Hinweise

  • Text ohne Format wird nach den Spracheinstellungen der Steuereinheit gelesen. Verwenden Sie ISO 8601 ("2026-01-15T08:30:00") oder geben Sie ein Format an, damit das Ergebnis nicht von ihnen abhängt.
  • Text mit einem Versatz oder Z ("2026-01-15T08:30:00Z") bleibt ein Wert in UTC. Ist kind auf Utc gesetzt, wird Text ohne Zoneninformation als UTC gelesen.
  • Für Unix-Zeit setzen Sie die Eigenschaft UNIXTIME.

Beispiel

VAR start := DATETIME(2026, 1, 15, 8, 30, 0);
VAR iso := DATETIME("2026-01-15T08:30:00");
VAR custom := DATETIME("15.01.2026 08:30", "dd.MM.yyyy HH:mm");
VAR utc := DATETIME(2026, 1, 15, 8, 30, 0, 0, DateTimeKind.Utc);
custom.MINUTE;
# Result: 30

DATETIMEADD

DATETIMEADD gibt einen neuen Wert datetime zurück, verschoben um die angegebene Anzahl Jahre, Monate, Tage, Stunden, Minuten, Sekunden und Millisekunden; negative Zahlen verschieben ihn zurück.

1
DATETIMEADD(datetime, years [, months [, days [, hours [, minutes [, seconds [, milliseconds]]]]]])

Hinweise — Der ursprüngliche Wert ändert sich nicht. Ein Monat zum 31. Januar addiert ergibt den letzten Tag des Februars. Um ein Intervall zu addieren, können Sie auch + mit einem timespan oder mit einer Anzahl Millisekunden verwenden.

Beispiel

VAR now := NOW();
VAR tomorrow := DATETIMEADD(now, 0, 0, 1);
VAR twoHoursAgo := DATETIMEADD(now, 0, 0, 0, -2);
VAR endOfFebruary := DATETIMEADD(DATETIME(2026, 1, 31), 0, 1);
endOfFebruary.DAY;
# Result: 28

TIMESPAN

TIMESPAN erstellt einen Wert timespan — eine Zeitdauer — entweder aus Millisekunden oder aus Tagen, Stunden, Minuten, Sekunden und Millisekunden.

1
2
TIMESPAN(milliseconds)
TIMESPAN(days, hours, minutes, seconds, milliseconds)

Eigenschaften (nur lesbar)

EigenschaftBedeutung
DAYS, HOURS, MINUTES, SECONDS, MILLISECONDSEin Bestandteil der Zeitdauer (HOURS ist 0 – 23).
TOTALDAYS, TOTALHOURS, TOTALMINUTES, TOTALSECONDS, TOTALMILLISECONDSDie ganze Zeitdauer in dieser Einheit, mit Nachkommastellen.

Hinweise

  • Es gibt nur die Formen mit 1 und mit 5 Argumenten; 2 bis 4 Argumente brechen das Skript ab.
  • timespan ± timespan ergibt einen timespan, datetime ± timespan einen datetime.
  • Die Subtraktion zweier Werte datetime ist nicht definiert. Für die Zeit zwischen zwei Daten subtrahieren Sie ihre TICKS (Millisekunden).
  • Die Deklaration einer Variablen mit dem Typ-Schlüsselwort timespan benötigt Core 2023.2 oder neuer.

Beispiel

VAR t := TIMESPAN(1, 2, 3, 4, 0);
t.TOTALSECONDS;
# Result: 93784
VAR start := DATETIME(2026, 1, 15, 8, 0, 0);
VAR stop := DATETIME(2026, 1, 15, 9, 30, 0);
(stop.TICKS - start.TICKS) / 60000;
# Result: 90 (minutes)

Fehler — TIMESPAN Unsupported number of parameters; Operator ‘-’ not defined for ‘DateTime’ and ‘DateTime’.

LOCALTIMEZONE

LOCALTIMEZONE gibt den aktuellen Versatz der Zeitzone der Steuereinheit gegenüber UTC in Millisekunden zurück, einschließlich Sommerzeit.

1
LOCALTIMEZONE()

Beispiel

LOCALTIMEZONE() / 3600000;
# Result: 1 in Central European winter time, 2 in summer time

Eigenschaften von Werten datetime

Ein Wert datetime hat diese Eigenschaften. Lesen Sie sie aus einer Variablen, nicht aus einem Funktionsaufruf.

EigenschaftLesenSchreibenHinweis
TICKS✓✓Millisekunden seit 1.1.0001.
YEAR, MONTH, DAY✓✓Beim Schreiben wird der Bereich geprüft (MONTH 1 – 12, DAY 1 – letzter Tag des Monats).
HOUR, MINUTE, SECOND, MILLISECOND✓✓Bereiche 0 – 23, 0 – 59, 0 – 59, 0 – 999.
DAYOFWEEK✓Wert DayOfWeek (Monday … Sunday).
DAYOFYEAR✓1 – 366.
KIND✓✓DateTimeKind: Local, Utc oder Unspecified.
UTCDATETIME, LOCALDATETIME✓Derselbe Zeitpunkt, umgerechnet mit der Zeitzone der Steuereinheit.
UNIXTIME✓✓Sekunden seit 1.1.1970 UTC. Beim Schreiben wird ein Wert in UTC gespeichert.

Hinweise

  • Außerhalb eines Funktionsarguments wird ein Aufzählungswert mit seinem Typ geschrieben: DayOfWeek.Saturday. Ein alleinstehendes Saturday ist eine unbekannte Variable.
  • <, > und = vergleichen zwei Werte datetime als Zeitpunkte, daher werden auch Werte mit unterschiedlichem KIND korrekt verglichen.
  • Das Schreiben eines Werts außerhalb des Bereichs bricht das Skript ab, zum Beispiel mit Value must between 0-23.
  • Ohne Format gibt TOSTRING einen datetime als yyyy/MM/dd hh:mm:ss.fff aus — im 12-Stunden-Format ohne AM oder PM. Geben Sie ein Format wie "yyyy-MM-dd HH:mm" an.

Beispiel — keine Aktion am Wochenende

VAR now := NOW();
IF now.DAYOFWEEK = DayOfWeek.Saturday OR now.DAYOFWEEK = DayOfWeek.Sunday
    RETURN(0);
END
1;

Beispiel — Datum aus einem Unix-Zeitstempel

datetime d;
d.UNIXTIME := 1767225600;
d.YEAR;
# Result: 2026 (1 January 2026, 00:00 UTC)

Siehe auch — Formatstrings, Datentypen.