首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在xslt或TIBCO中将多个dateTime字符串解析为dateTime格式

在xslt或TIBCO中将多个dateTime字符串解析为dateTime格式
EN

Stack Overflow用户
提问于 2018-08-14 01:53:38
回答 1查看 547关注 0票数 2

以下是格式

代码语言:javascript
复制
<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>中所看到的那样。

有人知道我该怎么解决这个问题吗..在我使用的活动输入中

代码语言:javascript
复制
$duration=xsd:dateTime(DateTime[1])
format-dateTime($duration,"[Y0001]-[M01]-[D01]")

但由于<DateTime>29-11-2012T14:35:53</DateTime>的原因,它没有显示任何内容。

我想要类似如下的输出:

代码语言:javascript
复制
<Calendar>
    <Record>
        <DateTime>2000-09-29T15:28:07</DateTime>
        <Description>Date4</Description>
        <Difference>6476 Days 8 Hours 18 Minutes 48 Seconds</Difference>
    </Record>
</Calendar>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-16 09:08:26

xsd:dateTime()函数只能分析有效的ISO 8601 dateTime格式值。

您可以测试值是否为castable as xsd:dateTime,对于不匹配的值,可以使用正则表达式来测试它是否与已知格式匹配,并使用带有正则表达式和捕获组的replace()来构造格式正确的ISO8601格式的dateTime值,该值可以解析为xsd:dateTime

代码语言:javascript
复制
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 ()

您可以使用您希望支持的其他dateTime模式添加额外的if/else块。

一旦可以构造xsd:dateTime对象,就可以执行所需的计算。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51827975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档