[ Version ( since = "2.56" ) ]
public DateTime.from_iso8601 (string text, TimeZone? default_tz)

Creates a DateTime corresponding to the given ISO 8601 formatted string text.

ISO 8601 strings of the form <date><sep><time><tz> are supported, with some extensions from RFC 3339 as mentioned below.

Note that as DateTime "is oblivious to leap seconds", leap seconds information in an ISO-8601 string will be ignored, so a `23:59:60` time would be parsed as `23:59:59`.

<sep> is the separator and can be either 'T', 't' or ' '. The latter two separators are an extension from [RFC 3339 ](

<date> is in the form:

  • `YYYY-MM-DD` - Year/month/day, e.g. 2016-08-24.
  • `YYYYMMDD` - Same as above without dividers.
  • `YYYY-DDD` - Ordinal day where DDD is from 001 to 366, e.g. 2016-237.
  • `YYYYDDD` - Same as above without dividers.
  • `YYYY-Www-D` - Week day where ww is from 01 to 52 and D from 1-7, e.g. 2016-W34-3.
  • `YYYYWwwD` - Same as above without dividers.

<time> is in the form:

  • `hh:mm:ss(.sss)` - Hours, minutes, seconds (subseconds), e.g. 22:10:42.123.
  • `hhmmss(.sss)` - Same as above without dividers.

<tz> is an optional timezone suffix of the form:

  • `Z` - UTC.
  • `+hh:mm` or `-hh:mm` - Offset from UTC in hours and minutes, e.g. +12:00.
  • `+hh` or `-hh` - Offset from UTC in hours, e.g. +12.

If the timezone is not provided in text it must be provided in default_tz (this field is otherwise ignored).

This call can fail (returning null) if text is not a valid ISO 8601 formatted string.

You should release the return value by calling g_date_time_unref when you are done with it.



an ISO 8601 formatted time string.


a TimeZone to use if the text doesn't contain a timezone, or null.


a new DateTime, or null