夏令时不同时区中dateTime的Xslt转换

时间:2019-04-22 11:38:31

标签: xslt xslt-2.0 exslt

在xslt转换方面寻求一些帮助,以节省日光在不同时区进行dateTime。在xslt中进行dateTime转换时如何处理EST与EDT?

在此处输入代码

case SET_MULTIFORM:
      return {
        ...state,
        multiForm: [...state.multiForm, ...Array.from({ length: action.payload }).map(() => ({firstName: '', lastName: ''}))]
    };

看到了这篇文章,但所有内容都表明我找不到想要的东西。 Similar query on stack overflow

1 个答案:

答案 0 :(得分:3)

在XSLT 3.0中,您可以使用$place函数的format-dateTime()参数来实现此目的。引用函数和运算符规范9.8.4

  

如果$ place参数以IANA时区的形式提供   实现识别的名称,然后是日期或时间   格式化后,将其调整为适用于   时区。例如,如果xs:dateTime值为2010-02-15T12:00:00Z   格式为$ place参数设置为America / New_York,然后   输出将好像值2010-02-15T07:00:00-05:00   提供。此调整考虑了夏令时   在可能的情况;如果相关日期是夏令时   纽约时间,然后将其调整为时区偏移量-PT4H而不是   比-PT5H。仅可以使用夏令时进行调整   该值包括一个日期,并且该日期在   时区数据库覆盖的范围。

请注意,这种表达方式为实现提供了“不识别”时区名称的选项;但让我们假设他们会这么做。

当然,首先需要将2019/03/09 14:00转换为xs:dateTime2019-03-09T14:00:00Z,这是简单的字符串操作。

现在,您可以通过执行America/New_York来确定format-time(xs:dateTime('2019-03-09T00:00:00'), '[Z]', (), (), 'America/New_York')的时区偏移量,这将为您提供诸如“ -05:00”(作为字符串)的值。您可以使用更简单的字符串操作将其转换为dayTimeDuration -PT05H00M,然后使用adjustDateTimeToTimezone()将此位移应用于原始日期/时间值。

format-dateTime()的XSLT 2.0版本未定义此功能。