PlainDateTime
objects can be serialized and parsed using the RFC 9557 format, an extension to the ISO 8601 / RFC 3339 format. The string has the following form (spaces are only for readability and should not be present in the actual string):
YYYY-MM-DD T HH:mm:ss.sssssssss [u-ca=calendar_id]
YYYY
-
Either a four-digit number, or a six-digit number with a +
or -
sign.
MM
-
A two-digit number from 01
to 12
.
DD
-
A two-digit number from 01
to 31
. The YYYY
, MM
, and DD
components can be separated by -
or nothing.
T
Optional -
The date-time separator, which can be T
, t
, or a space. Present if and only if HH
is present.
HH
Optional -
A two-digit number from 00
to 23
. Defaults to 00
.
mm
Optional -
A two-digit number from 00
to 59
. Defaults to 00
.
ss.sssssssss
Optional -
A two-digit number from 00
to 59
. May optionally be followed by a .
or ,
and one to nine digits. Defaults to 00
. The HH
, mm
, and ss
components can be separated by :
or nothing. You can omit either just ss
or both ss
and mm
, so the time can be one of three forms: HH
, HH:mm
, or HH:mm:ss.sssssssss
.
[u-ca=calendar_id]
Optional -
Replace calendar_id
with the calendar to use. May have a critical flag by prefixing the key with !
: e.g., [!u-ca=iso8601]
. This flag generally tells other systems that it cannot be ignored if they don't support it. The Temporal
parser will throw an error if the annotations contain two or more calendar annotations and one of them is critical. Defaults to [u-ca=iso8601]
. Note that the YYYY-MM-DD
is always interpreted as an ISO 8601 calendar date and then converted to the specified calendar.
As an input, you may optionally include the offset and time zone identifier, in the same format as ZonedDateTime
, but they will be ignored. Note that the offset must not be Z
. Other annotations in the [key=value]
format are also ignored, and they must not have the critical flag.
When serializing, you can configure the fractional second digits, whether to display the calendar ID, and whether to add a critical flag for it.