Interprets a string representing a date and/or time in a user-defined format.

parse-dateTime($input as xs:string?, $format as xs:string) ➔ union(xs:dateTime, xs:date, xs:time, xs:gYear, xs:gYearMonth, xs:gMonth, xs:gMonthDay, xs:gDay)?





The input date/time




The format used to parse the date and time


union(xs:dateTime, xs:date, xs:time, xs:gYear, xs:gYearMonth, xs:gMonth, xs:gMonthDay, xs:gDay)?


Notes on the Saxon implementation

Available since Saxon 10.


If the $input argument is an empty sequence, the result is an empty sequence.

The $format argument is a pattern representing the format of the date/time supplied in the $input argument. The pattern follows the rules of the Java DateTimeFormatter class. Here are some simple examples:

$input $format Result
9/23/2018 M/d/yyyy xs:date('2018-09-23')
23/9/2018 d/M/yyyy xs:date('2018-09-23')
10:14 Sep 23, 2012 HH:mm MMM dd, yyyy xs:dateTime('2012-09-23T10:14:00')
2018-03-31T14:20Z yyyy-MM-dd'T'HH:mmX xs:dateTime('2018-03-31T14:20:00Z')
8.42 xs:time('08:42:00')
2018-03-31T14:20 yyyy-MM-dd'T'HH:mm xs:dateTime('2018-03-31T14:20:00')

The locale used for parsing names of months is the system default locale.

Parsing is case-independent and is "smart" in the terminology of Java's ResolverStyle.

A dynamic error is raised if the pattern is invalid, or if the input cannot be parsed according to the rules of the pattern.

The return type depends on the components actually present in the supplied value, and is the first of the following that apply:

  • If year, month, day, hour, and minute are all present, then xs:dateTime (the seconds value defaults to zero).
  • If year, month, day are all present, then xs:date.
  • If hour and minute are both present, then xs:time (the seconds value defaults to zero).
  • If year and month are both present, then xs:gYearMonth.
  • If year is present, then xs:gYear.
  • If month and day are both present, then xs:gMonthDay.
  • If month is present, then xs:gMonth.
  • Otherwise, empty sequence.

If no timezone offset is specified, the result will have no timezone component.