Datums- und Uhrzeitkonvertierung

Datums- und Uhrzeitkonvertierung 1:

Undefiniertes Ergebnis bei Überschreitung des Wertebereichs

Wenn der Eingangswert eines Typkonvertierungsoperators außerhalb des Wertebereichs des Ausgangsdatentyps liegt, ist das Ergebnis der Operation nicht definiert und abhängig von der Plattform. Dies ist beispielsweise der Fall, wenn ein negativer Operandenwert von LREAL in den Zieldatentyp UINT konvertiert wird. Auch ein Ausnahmefehler ist dann möglich!

Datums- und Uhrzeitkonvertierung 2:

Informationsverlust möglich

Wenn ein größerer Datentyp in einen kleineren Datentyp konvertiert wird, können Informationen verloren gehen.

Datums- und Uhrzeitkonvertierung 3:

Stringmanipulation bei Konvertierung nach STRING oder WSTRING

Bei einer Typkonvertierung nach STRING oder WSTRING wird der getypte Wert als Zeichenfolge linksbündig abgelegt und bei Überlänge abgeschnitten. Deklarieren Sie deshalb die Rückgabevariablen für die Typkonvertierungsoperatoren <type>_TO_STRING und <type>_TO_WSTRING ausreichend lang, sodass die Zeichenfolge ohne Manipulation Platz findet.

TIME/TOD_TO_<type>

Die Operatoren dienen der Konvertierung einer Datums- und Uhrzeitangabe in einen anderen Datentyp.

Als Operand können Sie eine Variable oder ein Literal angeben.

Syntax:

DATE_TO_<Datentyp> (<Variablenname> | <Literal>)
DT_TO_<Datentyp> (<Variablenname> | <Literal>)
TOD_TO_<Datentyp> (<Variablenname> | <Literal>)
LDATE_TO_<Datentyp> (<Variablenname> | <Literal>)
LDT_TO_<Datentyp> (<Variablenname> | <Literal>)
LTOD_TO_<Datentyp> (<Variablenname> | <Literal>)

Die Datentypen DATE und DT verwenden intern das gleiche Speicherformat und werden als DWORD abgelegt. Die Auflösung bei DATE ist 1 Tag. Die Auflösung bei DT ist 1 Sekunde. Beide beginnen mit dem 1. Januar 1970. TOD wird als DWORD mit einer Auflösung von 1 Millisekunde abgelegt.

Beispiele:

ST-Code

Ergebnis

sVar := TIME_TO_STRING(T#12ms);

'T#12ms'

nVar := TIME_TO_DWORD(T#5m);

300000

nVar := TOD_TO_SINT(TOD#00:00:00.012);

12

Datums- und Uhrzeitangabe nach BOOL konvertieren

Operatoren:

DATE_TO_BOOL (<Variablenname> | <Literal>)
DT_TO_BOOL (<Variablenname> | <Literal>)
TOD_TO_BOOL (<Variablenname> | <Literal>)
LDATE_TO_BOOL (<Variablenname> | <Literal>)
LDT_TO_BOOL (<Variablenname> | <Literal>)
LTOD_TO_BOOL (<Variablenname> | <Literal>)

Genau dann, wenn der Operandenwert als „0“ interpretiert werden kann, wird vom Operator ein FALSE zurückgegeben.

Beispiele:

ST-Code

Ergebnis

DATE_TO_BOOL(D#1970-1-1);

FALSE

DT_TO_BOOL(DT#1970-1-1-0:0:0);

FALSE

TOD_TO_BOOL(TOD#0:0:0);

FALSE

DATE_TO_BOOL(D#2019-9-1);

TRUE

DT_TO_BOOL(DT#2019-9-1-12:0:0);

TRUE

TOD_TO_BOOL(TOD#12:0:0);

TRUE

Datums- und Uhrzeitangabe nach Integer konvertieren

Operatoren:

DATE_TO_<INT-Datentyp> (<Variablenname> | <Literal>)
DT_TO_<INT-Datentyp> (<Variablenname> | <Literal>)
TOD_TO_<INT-Datentyp> (<Variablenname> | <Literal>)
LDATE_TO_<INT-Datentyp> (<Variablenname> | <Literal>)
LDT_TO_<INT-Datentyp> (<Variablenname> | <Literal>)
LTOD_TO_<INT-Datentyp> (<Variablenname> | <Literal>)

Die Datentypen DATE und DT verwenden intern das gleiche Speicherformat, nämlich ein DWORD. Die Auflösung bei DATE ist 1 Tag. Die Auflösung bei DT ist 1 Sekunde. Beide beginnen mit dem 1. Januar 1970.

TOD wird als DWORD mit einer Auflösung von 1 Millisekunde abgelegt.

Beispiele:

ST-Code

Ergebnis

DT_TO_DINT(DT#1970-1-1-0:0:0);

0

DATE_TO_DINT(D#1970-1-1);

0

TOD_TO_DINT(TOD#0:0:0);

0

DT_TO_DINT(DT#1970-1-1-0:0:1);

1

DATE_TO_DINT(D#1970-1-2);

86400

DT_TO_DINT(DT#2019-9-1-12:0:0.0);

1567339200

DATE_TO_DINT(D#2019-9-1);

1567339200

TOD_TO_DINT(TOD#12:0:0);

43200000

Datums- und Uhrzeitangabe nach STRING/WSTRING konvertieren

Operatoren:

DATE_TO_<STRING/WSTRING> (<Variablenname> | <Literal>)
DT_TO_<STRING/WSTRING> (<Variablenname> | <Literal>)
TOD_TO_<STRING/WSTRING> (<Variablenname> | <Literal>)
LDATE_TO_<STRING/WSTRING> (<Variablenname> | <Literal>)
LDT_TO_<STRING/WSTRING> (<Variablenname> | <Literal>)
LTOD_TO_<STRING/WSTRING> (<Variablenname> | <Literal>)

Die Operanden des Typs DATE, DATE_AND_TIME, TIME_OF_DAY, DT oder TOD, die für eine Datums- und Uhrzeitkonvertierung an einen Operator übergeben werden, werden in ihrer Konstantenschreibweise (Literalschreibweise) konvertiert. Der erzeugte String enthält die Schlüsselwörter D#, DT# oder TOD# und danach die Größe mit ihrer Datums- und Uhrzeiteinheit, wie in der Norm IEC 61131-3 angegeben.

Beispiele:

ST-Code

Ergebnis

TIME_TO_STRING(T#12ms);

'T#12ms'

DT_TO_STRING(DT#1998-02-13-14:20);

'DT#1998-02-13-14:20:00'

Siehe auch: