XPath/XQuery adjust-time-to-timezone function

Summary

Adjusts an xs:time value to a specific timezone, or to no timezone at all.

Signatures

fn:adjust-time-to-timezone(
$arg as xs:time?
) as xs:time?
fn:adjust-time-to-timezone(
$arg as xs:time?,
$timezone as xs:dayTimeDuration?
) as xs:time?

Properties

The one-argument form of this function is deterministic, context-dependent, and focus-independent. It depends on implicit-timezone.
The two-argument form of this function is deterministic, context-independent, and focus-independent.

Rules

If $timezone is not specified, then the effective value of $timezone is the value of the implicit timezone in the dynamic context.

If $arg is the empty sequence, then the function returns the empty sequence.

If $arg does not have a timezone component and $timezone is the empty sequence, then the result is $arg.

If $arg does not have a timezone component and $timezone is not the empty sequence, then the result is $arg with $timezone as the timezone component.

If $arg has a timezone component and $timezone is the empty sequence, then the result is the localized value of $arg without its timezone component.

If $arg has a timezone component and $timezone is not the empty sequence, then:

  • Let $dt be the xs:dateTime value fn:dateTime(xs:date('1972-12-31'), $arg).

  • Let $adt be the value of fn:adjust-dateTime-to-timezone($dt, $timezone)

  • The function returns the xs:time value xs:time($adt).

Examples

Assume the dynamic context provides an implicit timezone of -05:00 (-PT5H0M).

let $tz-10 := xs:dayTimeDuration("-PT10H")

The expression fn:adjust-time-to-timezone(xs:time("10:00:00")) returns xs:time("10:00:00-05:00").

The expression fn:adjust-time-to-timezone(xs:time("10:00:00-07:00")) returns xs:time("12:00:00-05:00").

The expression fn:adjust-time-to-timezone(xs:time("10:00:00"), $tz-10) returns xs:time("10:00:00-10:00").

The expression fn:adjust-time-to-timezone(xs:time("10:00:00-07:00"), $tz-10) returns xs:time("07:00:00-10:00").

The expression fn:adjust-time-to-timezone(xs:time("10:00:00"), ()) returns xs:time("10:00:00").

The expression fn:adjust-time-to-timezone(xs:time("10:00:00-07:00"), ()) returns xs:time("10:00:00").

The expression fn:adjust-time-to-timezone(xs:time("10:00:00-07:00"), xs:dayTimeDuration("PT10H")) returns xs:time("03:00:00+10:00").

Error Conditions

A dynamic error is raised if $timezone is less than -PT14H or greater than PT14H or if does not contain an integral number of minutes.