date - 在 xslt 或 TIBCO BW 中将多个 dateTime 字符串解析为 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>
。
有谁知道我该如何解决这个问题..在我使用的活动输入中
$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()
函数只能解析有效的ISO 8601 dateTime 格式值。
您可以测试该值是否为,对于那些不是,使用正则表达式来测试它是否与已知格式匹配,并使用正则表达式和捕获组来构造一个格式正确的 ISO 8601 格式的 dateTime 值,该值可以解析为:castable as
xsd:dateTime
replace()
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.*)', '$3-$2-$1$4'))
else ()
您可以使用您想要支持的其他日期时间模式添加额外的 if/else 块。
一旦可以构造xsd:dateTime
对象,就可以执行所需的计算。
推荐阅读
- python - 如何将中性情绪添加到经过训练的数据集中?使用 sklearn 和 nltk
- laravel - Laravel 7 迁移错误:外键约束形成错误
- python - Python/Pandas:将多个 CSV 文件转换为具有联合和有序标题并填充缺失的数据
- fortran - 当 fortran 代码读取 linux 集群上的文件时发生 SIGBUS
- amazon-s3 - Strapi 文件上传在生产中不起作用
- php - Vue 组件在 laravel 6.18.16 中未显示或起床
- asp.net-core - 在 asp.net core 中加密和解密部分文件内容
- python - flask.jsonify 返回带有方括号而不是大括号的数组
- c# - 我可以改变 wpf 按钮矩形的一个角度来得到一个三角形吗?
- java - WeldProxy 无法识别异常源