将多个日期时间字符串解析为 xslt 或 TIBCO BW 中的日期时间格式
Parsing multiple dateTime strings into dateTime formats in xslt or TIBCO BW
格式如下
<Record>
<DateTime>2012-11-11T17:06:54</DateTime>
<Description>Date1</Description>
</Record>
<Record>
<DateTime>2012-11-11T17:06:54</DateTime>
<Description>Date2</Description>
</Record>
<Record>
<DateTime>2000-09-29T15:28:08</DateTime>
<Description>Date3</Description>
</Record>
<Record>
<DateTime>29-11-2012T14:35:53</DateTime>
<Description>Date4</Description>
</Record>
<Record>
<DateTime>2000-09-29T15:28:10</DateTime>
<Description>Date5</Description>
</Record>
我希望他们立即解析为 dateTime 格式,而不使用像 "YY:MM:dd"...
这样的格式
我以前使用过这种格式,但我无法调试或发送输出,因为第四个 Record 标签的格式与上面示例中看到的不同 <DateTime>29-11-2012T14:35:53</DateTime>
。
有谁知道我该如何解决这个问题..在我使用的 Activity 输入中
$duration=xsd:dateTime(DateTime[1])
format-dateTime($duration,"[Y0001]-[M01]-[D01]")
但由于 <DateTime>29-11-2012T14:35:53</DateTime>
.
它没有显示任何内容
我想要类似这样的输出:
<Calendar>
<Record>
<DateTime>2000-09-29T15:28:07</DateTime>
<Description>Date4</Description>
<Difference>6476 Days 8 Hours 18 Minutes 48 Seconds</Difference>
</Record>
</Calendar>
xsd:dateTime()
function can only parse valid ISO 8601 日期时间格式值。
您可以使用正则表达式和捕获组测试该值是否为 castable as
xsd:dateTime
, and for those that are not, use a regex to test whether it matches known formats, and replace()
,以构建格式正确的 ISO 8601 格式的 dateTime 值,该值可以解析为 xsd:dateTime
:
if (DateTime castable as xsd:dateTime ) then
xsd:dateTime(DateTime)
else
if (matches(DateTime, '\d\d-\d\d-\d\d\d\dT.*')) then
xsd:dateTime(replace(DateTime, '(\d+)-(\d+)-(\d+)(T.*)', '--'))
else ()
您可以使用您想要支持的其他日期时间模式添加额外的 if/else 块。
一旦可以构建 xsd:dateTime
个对象,就可以执行所需的计算了。
格式如下
<Record>
<DateTime>2012-11-11T17:06:54</DateTime>
<Description>Date1</Description>
</Record>
<Record>
<DateTime>2012-11-11T17:06:54</DateTime>
<Description>Date2</Description>
</Record>
<Record>
<DateTime>2000-09-29T15:28:08</DateTime>
<Description>Date3</Description>
</Record>
<Record>
<DateTime>29-11-2012T14:35:53</DateTime>
<Description>Date4</Description>
</Record>
<Record>
<DateTime>2000-09-29T15:28:10</DateTime>
<Description>Date5</Description>
</Record>
我希望他们立即解析为 dateTime 格式,而不使用像 "YY:MM:dd"...
这样的格式我以前使用过这种格式,但我无法调试或发送输出,因为第四个 Record 标签的格式与上面示例中看到的不同 <DateTime>29-11-2012T14:35:53</DateTime>
。
有谁知道我该如何解决这个问题..在我使用的 Activity 输入中
$duration=xsd:dateTime(DateTime[1])
format-dateTime($duration,"[Y0001]-[M01]-[D01]")
但由于 <DateTime>29-11-2012T14:35:53</DateTime>
.
我想要类似这样的输出:
<Calendar>
<Record>
<DateTime>2000-09-29T15:28:07</DateTime>
<Description>Date4</Description>
<Difference>6476 Days 8 Hours 18 Minutes 48 Seconds</Difference>
</Record>
</Calendar>
xsd:dateTime()
function can only parse valid ISO 8601 日期时间格式值。
您可以使用正则表达式和捕获组测试该值是否为 castable as
xsd:dateTime
, and for those that are not, use a regex to test whether it matches known formats, and replace()
,以构建格式正确的 ISO 8601 格式的 dateTime 值,该值可以解析为 xsd:dateTime
:
if (DateTime castable as xsd:dateTime ) then
xsd:dateTime(DateTime)
else
if (matches(DateTime, '\d\d-\d\d-\d\d\d\dT.*')) then
xsd:dateTime(replace(DateTime, '(\d+)-(\d+)-(\d+)(T.*)', '--'))
else ()
您可以使用您想要支持的其他日期时间模式添加额外的 if/else 块。
一旦可以构建 xsd:dateTime
个对象,就可以执行所需的计算了。