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. See Intl.supportedValuesOf() for a list of commonly supported calendar types. Defaults to [u-ca=iso8601]. 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. 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.