XPath/XQuery函数:日期和时间
Altova的日期/时间扩展函数可以在XPath和XQuery表达式中使用,并提供了额外的功能来处理作为XML Schema的各种日期和时间数据类型保留的数据。本部分中的函数可以与Altova的XPath 3.0和XQuery 3.0引擎一起使用。它们都在XPath/XQuery上下文中可用。
Altova扩展函数可以在XPath/XQuery表达式中使用。除了XPath、XQuery和XSLT标准函数库中可用的功能外,它们还提供了额外的功能。Altova扩展函数在Altova扩展函数命名空间中,http://www.altova.com/xslt-extensions,并在本部分中用altova:前缀表示,假定它与该命名空间绑定。请注意,这些函数可能在未来的产品版本中不被支持,或者个别函数的行为可能会发生变化。有关每个产品版本中对Altova扩展函数的支持的信息,请参见该版本的文档。
|
altova:add-minutes-to-dateTime altova:add-seconds-to-dateTime altova:dateTime-from-epoch-no-TZ altova:hours-from-dateTimeDuration-accumulated altova:minutes-from-dateTimeDuration-accumulated |
[ 回到顶部 ]
将一个持续时间添加到xs:dateTime XP3.1 XQ3.1
以下函数将一个持续时间添加到xs:dateTime并返回xs:dateTime。xs:dateTime类型的格式为CCYY-MM-DDThh:mm:ss.sss。它是一个xs:date和xs:time格式的串联,中间由T字母分隔。一个时区后缀(例如,+01:00)是可选的。
altova:add-years-to-dateTime(DateTime as xs:dateTime, Years as xs:integer) as xs:dateTime XP3.1 XQ3.1 将一个持续时间(以年为单位)添加到xs:dateTime(参见下方示例)。第二个参数是要添加到xs:dateTime(第一个参数)的年数。返回的结果类型为xs:dateTime。
|
altova:add-months-to-dateTime(DateTime as xs:dateTime, Months as xs:integer) as xs:dateTime XP3.1 XQ3.1 将一个持续时间(以月为单位)添加到xs:dateTime(参见下方示例)。第二个参数是要添加到xs:dateTime(第一个参数)的月数。返回的结果类型为xs:dateTime。
|
altova:add-days-to-dateTime(DateTime as xs:dateTime, Days as xs:integer) as xs:dateTime XP3.1 XQ3.1 将一个持续时间(以天为单位)添加到xs:dateTime(参见下方示例)。第二个参数是要添加到xs:dateTime(第一个参数)的天数。返回的结果类型为xs:dateTime。
|
altova:add-hours-to-dateTime(DateTime as xs:dateTime, Hours as xs:integer) as xs:dateTime XP3.1 XQ3.1 将一个持续时间(以小时为单位)添加到xs:dateTime(参见下方示例)。第二个参数是要添加到xs:dateTime(第一个参数)的小时数。返回的结果类型为xs:dateTime。
|
altova:add-minutes-to-dateTime(DateTime as xs:dateTime, Minutes as xs:integer) as xs:dateTime XP3.1 XQ3.1 将一个持续时间(以分钟为单位)添加到xs:dateTime(参见下方示例)。第二个参数是要添加到xs:dateTime(第一个参数)的分钟数。返回的结果类型为xs:dateTime。
|
altova:add-seconds-to-dateTime(DateTime as xs:dateTime, Seconds as xs:integer) as xs:dateTime XP3.1 XQ3.1 将一个持续时间(以秒为单位)添加到xs:dateTime(参见下方示例)。第二个参数是要添加到xs:dateTime(第一个参数)的秒数。返回的结果类型为xs:dateTime。
|
[ 回到顶部 ]
将一个持续时间添加到xs:date XP3.1 XQ3.1
以下函数将一个持续时间添加到xs:date并返回xs:date。xs:date类型的格式为CCYY-MM-DD。
altova:add-years-to-date(Date as xs:date, Years as xs:integer) as xs:date XP3.1 XQ3.1 将一个持续时间(以年为单位)添加到一个日期。第二个参数是要添加到xs:date(第一个参数)的年数。返回的结果类型为xs:date。
|
altova:add-months-to-date(Date as xs:date, Months as xs:integer) as xs:date XP3.1 XQ3.1 将一个持续时间(以月为单位)添加到一个日期。第二个参数是要添加到xs:date(第一个参数)的月数。返回的结果类型为xs:date。
|
altova:add-days-to-date(Date as xs:date, Days as xs:integer) as xs:date XP3.1 XQ3.1 将一个持续时间(以天为单位)添加到一个日期。第二个参数是要添加到xs:date(第一个参数)的天数。返回的结果类型为xs:date。
|
[ 回到顶部 ]
设置格式和检索持续时间 XP3.1 XQ3.1
以下函数将分析xs:duration或xs:string输入,并分别返回一个xs:string或xs:duration。
altova:format-duration(Duration as xs:duration, Picture as xs:string) as xs:string XP3.1 XQ3.1 根据提交的图片字符串(第二个参数)来对一个持续时间(第一个参数)进行格式设置。返回一个根据该图片字符串设置了格式的文本字符串。
|
altova:parse-duration(InputString as xs:string, Picture as xs:string) as xs:duration XP3.1 XQ3.1 将一个模式字符串作为第一个参数,一个图片字符串作为第二个参数。根据图片字符串对输入字符串进行解析,并返回一个xs:duration。
|
[ 回到顶部 ]
以下函数将一个持续时间添加到xs:time并返回xs:time。xs:time类型的格式为hh:mm:ss.sss。一个时区后缀是可选的。Z表示协调世界时(UTC)。所有其他时区都以其与UTC的时差来表示,格式为+hh:mm,或-hh:mm。如果不存在任何时区值,则被视为未知;它不会被假定为UTC。
altova:add-hours-to-time(Time as xs:time, Hours as xs:integer) as xs:time XP3.1 XQ3.1 将一个持续时间(以小时为单位)添加到一个时间。第二个参数是要添加到xs:time(第一个参数)的小时数。返回的结果类型为xs:time。
|
altova:add-minutes-to-time(Time as xs:time, Minutes as xs:integer) as xs:time XP3.1 XQ3.1 将一个持续时间(以分钟为单位)添加到一个时间。第二个参数是要添加到xs:time(第一个参数)的分钟数。返回的结果类型为xs:time。
|
altova:add-seconds-to-time(Time as xs:time, Minutes as xs:integer) as xs:time XP3.1 XQ3.1 将一个持续时间(以秒为单位)添加到一个时间。第二个参数是要添加到xs:time(第一个参数)的秒数。返回的结果类型为xs:time。Seconds部分可以在0到59.999范围内。
|
[ 回到顶部 ]
从date/time数据类型中删除时区部分 XP3.1 XQ3.1
以下函数将分别从当前的xs:dateTime、xs:date或xs:time值中删除其时区部分。请注意,xs:dateTime和xs:dateTimeStamp之间的差异在于在后者中,时区部分是必需的(而该部分在前者中是可选的)。因此,xs:dateTimeStamp值的格式为:CCYY-MM-DDThh:mm:ss.sss±hh:mm. 或CCYY-MM-DDThh:mm:ss.sssZ。如果日期和时间是以xs:dateTimeStamp的形式从系统时钟中读取的,则如有需要,可以使用current-dateTime-no-TZ()函数来删除时区部分。
altova:current-date-no-TZ() as xs:date XP3.1 XQ3.1 该函数没有任何参数。它将删除current-date()(即系统时钟对应的当前日期)的时区部分,并返回一个xs:date。
|
altova:current-dateTime-no-TZ() as xs:dateTime XP3.1 XQ3.1 该函数没有任何参数。它将删除current-dateTime()(即系统时钟对应的当前日期和时间)的时区部分,并返回一个xs:dateTime。
|
altova:current-time-no-TZ() as xs:time XP3.1 XQ3.1 该函数没有任何参数。它将删除current-time()(即系统时钟对应的当前时间)的时区部分,并返回一个xs:time。
|
altova:date-no-TZ(InputDate as xs:date) as xs:date XP3.1 XQ3.1 该函数取一个xs:date参数,并删除其中的时区部分,并返回一个xs:date。请注意,日期是不会被修改的。
|
altova:dateTime-no-TZ(InputDateTime as xs:dateTime) as xs:dateTime XP3.1 XQ3.1 该函数取一个xs:dateTime参数,并删除其中的时区部分,并返回一个xs:dateTime。请注意,日期和时间是不会被修改的。
|
altova:time-no-TZ(InputTime as xs:time) as xs:time XP3.1 XQ3.1 该函数取一个xs:time参数,并删除其中的时区部分,并返回一个xs:time。请注意,时间是不会被修改的。
|
[ 回到顶部 ]
返回持续时间中的天数、小时数、分钟数和秒数 XP3.1 XQ3.1
以下函数将分别返回一个月中的天数,以及持续时间中的小时数、分钟数和秒数。
altova:days-in-month(Year as xs:integer, Month as xs:integer) as xs:integer XP3.1 XQ3.1 返回指定月份中的天数。月份是通过Year和Month参数来指定的。
|
altova:hours-from-dayTimeDuration-accumulated(DayAndTime as xs:duration) as xs:integer XP3.1 XQ3.1 返回由DayAndTime参数(类型为xs:duration))提交的持续时间中的总小时数。Day和Time部分中的小时数相加,得出一个整数结果。完整的60分钟才会被算为一个小时。负的持续时间将返回负的小时数。
|
altova:minutes-from-dayTimeDuration-accumulated(DayAndTime as xs:duration) as xs:integer XP3.1 XQ3.1 返回由DayAndTime参数(类型为xs:duration))提交的持续时间中的总分钟数。Day和Time部分中的分钟数相加,得出一个整数结果。负的持续时间将返回负的分钟值。
|
altova:seconds-from-dayTimeDuration-accumulated(DayAndTime as xs:duration) as xs:integer XP3.1 XQ3.1 返回由DayAndTime参数(类型为xs:duration))提交的持续时间中的总秒数。Day和Time部分中的秒数相加,得出一个整数结果。负的持续时间将返回负的秒数。
|
返回xs:dateTime或xs:date对应的星期几 XP3.1 XQ3.1
以下函数将返回xs:dateTime或xs:date对应的星期几(整数形式)。一周中的日子都是有编号的(使用美国格式),从1到7,Sunday=1。在欧洲格式中,一周始于星期一(=1)。在美国格式中,Sunday=1,可以通过使用整数0来设置。其中整数被接受来表示格式。
altova:weekday-from-dateTime(DateTime as xs:dateTime) as xs:integer XP3.1 XQ3.1 将一个带具体时间的日期作为其参数,并以整数形式返回该日期对应的星期几。一周中的日子都有对应的编号,以Sunday=1开始。如果需要使用欧洲格式(其中Monday=1),请使用该函数的另一个签名(参见下方的下一个签名)。
altova:weekday-from-dateTime(DateTime as xs:dateTime, Format as xs:integer) as xs:integer XP3.1 XQ3.1 将一个带具体时间的日期作为其第一个参数,并以整数形式返回该日期对应的星期几。如果第二个(整数)参数为0,则一周中的日子对应的编号为1到7,以Sunday=1开始。如果第二个参数是一个非0的整数,则Monday=1。如果没有第二个参数,则该函数将被读取为具有该函数的另一个签名(参见上一个签名)。
|
altova:weekday-from-date(Date as xs:date) as xs:integer XP3.1 XQ3.1 将一个日期作为其参数,并以整数形式返回该日期对应的星期几。一周中的日子都有对应的编号,以Sunday=1开始。如果需要使用欧洲格式(其中Monday=1),请使用该函数的另一个签名(参见下方的下一个签名)。
altova:weekday-from-date(Date as xs:date, Format as xs:integer) as xs:integer XP3.1 XQ3.1 将一个日期作为其第一个参数,并以整数形式返回该日期对应的星期几。如果第二个参数(Format)为0,则一周中的日子对应的编号为1到7,以Sunday=1开始。如果第二个参数是一个非0的整数,则Monday=1。如果没有第二个参数,则该函数将被读取为具有该函数的另一个签名(参见上一个签名)。
|
[ 回到顶部 ]
返回xs:dateTime或xs:date对应的周数 XP2 XQ1 XP3.1 XQ3.1
以下函数将返回xs:dateTime或xs:date对应的周数(整数形式)。周编号有美国、ISO/欧洲和伊斯兰历格式。周编号在这些日历格式中是不同的,因为每周的第一天是不同的(在美国格式中,一周始于周日,而在ISO/欧洲格式中,一周始于周一,在伊斯兰格式中一周始于周六)。
altova:weeknumber-from-date(Date as xs:date, Calendar as xs:integer) as xs:integer XP2 XQ1 XP3.1 XQ3.1 以整数形式返回提交的Date参数的周数。第二个参数(Calendar)指定要遵循的日历系统。 以下是支持的Calendar值:
• 0 = US calendar (一周始于周日) • 1 = ISO standard, European calendar (一周始于周一) • 2 = Islamic calendar (一周始于周六)
默认值为0。
|
altova:weeknumber-from-dateTime(DateTime as xs:dateTime, Calendar as xs:integer) as xs:integer XP2 XQ1 XP3.1 XQ3.1 以整数形式返回提交的DateTime参数的周数。第二个参数(Calendar)指定要遵循的日历系统。 以下是支持的Calendar值:
• 0 = US calendar (一周始于周日) • 1 = ISO standard, European calendar (一周始于周一) • 2 = Islamic calendar (一周始于周六)
默认值为0。
|
[ 回到顶部 ]
从各种类型的词法组件构建date、time和duration类型 XP3.1 XQ3.1
以下函数将xs:date、xs:time或xs:duration数据类型的词法组件作为输入参数,然后将其结合构建各自的数据类型。
altova:build-date(Year as xs:integer, Month as xs:integer, Date as xs:integer) as xs:date XP3.1 XQ3.1 第一个、第二个和第三个参数分别表示年份、月份和日期。将它们合在一起就构建了一个类型为xs:date的值。这些整数值必须在其对应的特定日期部分的正确范围内。例如,第二个参数(即月份部分)不应该超过12。
|
altova:build-time(Hours as xs:integer, Minutes as xs:integer, Seconds as xs:integer) as xs:time XP3.1 XQ3.1 第一个、第二个和第三个参数分别表示小时数(0到23),分钟数(0到59)和秒数(0到59)。将它们合在一起就构建了一个类型为xs:time的值。这些整数值必须在其对应的特定时间部分的正确范围内。例如,第二个参数(Minutes)不应大于59。要为该值添加一个时区部分,请使用该函数的另一个签名(参见下一个签名)。
altova:build-time(Hours as xs:integer, Minutes as xs:integer, Seconds as xs:integer, TimeZone as xs:string) as xs:time XP3.1 XQ3.1 第一个、第二个和第三个参数分别表示小时数(0到23),分钟数(0到59)和秒数(0到59)。第四个参数是一个字符串,提供该值的时区部分。将这四个参数合在一起就构建了一个类型为xs:time的值。这些整数值必须在其对应的特定时间部分的正确范围内。例如,第二个参数(Minutes)不应大于59。
|
altova:build-duration(Years as xs:integer, Months as xs:integer) as xs:yearMonthDuration XP3.1 XQ3.1 取两个参数来构建一个类型为xs:yearMonthDuration的值。第一个参数将提供持续时间值的Years部分,而第二个参数将提供Months部分。如果第二个参数(Months)大于等于12,则该整数将除以12;得到的商被加到第一个参数以提供持续时间值的Years部分,余数将提供Months部分。要构建一个类型为xs:dayTimeDuration的持续时间,请参见下方签名。
altova:build-duration(Days as xs:integer, Hours as xs:integer, Minutes as xs:integer, Seconds as xs:integer) as xs:dayTimeDuration XP3.1 XQ3.1 取四个参数,将它们合在一起以构建一个类型为xs:dayTimeDuration的值。第一个参数提供该持续时间值的Days部分,第二个、第三个和第四个参数分别提供该持续时间值的Hours、Minutes和Seconds部分。每一个时间参数都会根据运算规则自动进位,其结果将被用于计算总持续时间值。例如,72秒会被转换为1M+12S(1分钟12秒),该值将被用于计算总持续时间值。要构建一个类型为xs:yearMonthDuration的持续时间,请参见上方的签名。
|
[ 回到顶部 ]
从字符串输入构造date、dateTime和time类型 XP2 XQ1 XP3.1 XQ3.1
以下函数以字符串为参数,构造xs:date、xs:dateTime或xs:time数据类型。根据提交的模式参数,对字符串进行分析,找出数据类型的组成部分。
altova:parse-date(Date as xs:string, DatePattern as xs:string) as xs:date XP2 XQ1 XP3.1 XQ3.1 以xs:date形式返回输入字符串Date。第二个参数DatePattern指定了输入字符串的模式。DatePattern是用下方列出的组件说明符和组件分隔符(可以是任何字符)来描述的。参见下方示例。
DatePattern中的模式必须与Date中的模式相匹配。由于输出的类型为xs:date,因此输出将总是具有以下词法格式:YYYY-MM-DD。
|
altova:parse-dateTime(DateTime as xs:string, DateTimePattern as xs:string) as xs:dateTime XP2 XQ1 XP3.1 XQ3.1 以xs:dateTime形式返回输入字符串DateTime。第二个参数DateTimePattern指定了输入字符串的模式。DateTimePattern是用下方列出的组件说明符和组件分隔符(可以是任何字符)来描述的。参见下方示例。
DateTimePattern中的模式必须与DateTime中的模式相匹配。由于输出的类型为xs:dateTime,因此输出将总是具有以下词法格式:YYYY-MM-DDTHH:mm:ss。
|
altova:parse-time(Time as xs:string, TimePattern as xs:string) as xs:time XP2 XQ1 XP3.1 XQ3.1 以xs:time形式返回输入字符串Time。第二个参数TimePattern指定了输入字符串的模式。TimePattern是用下方列出的组件说明符和组件分隔符(可以是任何字符)来描述的。参见下方示例。
TimePattern中的模式必须与Time中的模式相匹配。由于输出的类型为xs:time,因此输出将总是具有以下词法格式:HH:mm:ss。
|
[ 回到顶部 ]
年龄相关的函数 XP3.1 XQ3.1
以下函数返回(i) 一个输入参数日期和当前日期之间的计算年龄,或(ii) 两个输入参数日期之间的计算年龄。altova:age函数以年为单位返回年龄,而altova:age-details函数以一个由三个整数组成的序列(年、月和天数)返回年龄。
altova:age(StartDate as xs:date) as xs:integer XP3.1 XQ3.1 返回一个以年为单位的整数,即某个对象的年龄,从作为参数提交的起始日期开始计算,以当前日期结束(取自系统时钟)。如果输入参数是一个大于或等于未来一年的日期,则返回值为负。
altova:age(StartDate as xs:date, EndDate as xs:date) as xs:integer XP3.1 XQ3.1 返回一个以年为单位的整数,即某个对象的年龄,从作为第一个参数提交的起始日期开始计算,以作为第二个参数提交的结束日期结束。如果第一个参数比第二个参数晚一年或更长时间,则返回值将为负。
|
altova:age-details(InputDate as xs:date) as (xs:integer)* XP3.1 XQ3.1 返回三个整数,分别是作为参数提交的日期和当前日期(取自系统时钟)之间的年、月和天数。返回的years+months+days的总和提供了这两个日期(输入日期和当前日期)之间的总时间差。输入日期可能比当前日期更早或更晚,但无论如何,并不由返回值的符号表示;返回值始终是正值。
altova:age-details(Date-1 as xs:date, Date-2 as xs:date) as (xs:integer)* XP3.1 XQ3.1 返回三个整数,分别是两个日期参数之间的年、月和天数。返回的years+months+days的总和提供了这两个输入日期之间的总时间差;无论这两个日期中较早的还是较晚的作为第一个参数提交,都没有关系。返回值不能表示输入日期是早于,还是晚于当前日期。返回值始终是正值。
|
[ 回到顶部 ]
Epoch时间(Unix时间)函数 XP3.1 XQ3.1
Epoch时间是Unix系统上使用的一种时间系统。它将任何给定的时间点定义为自1970年1月1日00:00:00 UTC以来所经过的秒数。Altova的Epoch时间扩展函数将xs:dateTime值转换为Epoch时间值,反之亦然。
altova:dateTime-from-epoch(Epoch as xs:decimal as xs:dateTime XP3.1 XQ3.1 Epoch时间是Unix系统上使用的一种时间系统。它将任何给定的时间点定义为自1970年1月1日00:00:00 UTC以来所经过的秒数。dateTime-from-epoch函数将返回Epoch时间对应的xs:dateTime,根据本地时区进行调整,并在结果中包括时区信息。
该函数取一个xs:decimal参数,并返回一个xs:dateTime值,其中包含TZ(时区)部分。 结果是通过计算Epoch时间对应的UTC dateTime并向其添加本地时区(取自系统时钟)获得的。例如,如果该函数是在设为+01:00(相对于UTC)时区的机器上执行的,则在计算了对应的UTC dateTime后,还会在结果上加上一小时。时区信息,作为xs:dateTime结果的可选词法部分,被包括在dateTime结果中。请将该结果与dateTime-from-epoch-no-TZ的结果进行比较,并参考epoch-from-dateTime函数。
|
altova:dateTime-from-epoch-no-TZ(Epoch as xs:decimal as xs:dateTime XP3.1 XQ3.1 Epoch时间是Unix系统上使用的一种时间系统。它将任何给定的时间点定义为自1970年1月1日00:00:00 UTC以来所经过的秒数。dateTime-from-epoch-no-TZ函数将返回Epoch时间对应的xs:dateTime,并根据本地时区进行调整,但不在结果中包括时区信息。
该函数取一个xs:decimal参数,并返回一个xs:dateTime值,其中不包含TZ(时区)部分。结果是通过计算Epoch时间对应的UTC dateTime并向其添加本地时区(取自系统时钟)获得的。例如,如果该函数是在设为+01:00(相对于UTC)时区的机器上执行的,则在计算了对应的UTC dateTime后,还会在结果上加上一小时。时区信息,作为xs:dateTime结果的可选词法部分,并没有包括在dateTime结果中。请将该结果与dateTime-from-epoch的结果进行比较,并参考epoch-from-dateTime函数。
|
altova:epoch-from-dateTime(dateTimeValue as xs:dateTime) as xs:decimal XP3.1 XQ3.1 Epoch时间是Unix系统上使用的一种时间系统。它将任何给定的时间点定义为自1970年1月1日00:00:00 UTC以来所经过的秒数。epoch-from-dateTime函数将返回作为该函数的参数提交的xs:dateTime对应的Epoch时间。请注意,您需要明确构造xs:dateTime值。提交的xs:dateTime值可能包含或不包含可选的TZ(时区)部分。
无论所提交的参数中是否包含时区部分,本地时区偏移量(取自系统时钟)将从提交的dateTimeValue参数中减去。这将产生相应的UTC时间,根据该时间计算出对应的Epoch时间。例如,如果该函数是在设为+01:00(相对于UTC)时区的机器上执行的,则在计算Epoch值之前,需要从提交dateTimeValue中减去一小时。另请参见dateTime-from-epoch函数。
|
[ 回到顶部 ]