Tibco Businessworks,格式时间戳长至mm / dd / yyyy

时间:2010-02-18 02:49:41

标签: tibco

我正在尝试使用监控表的tibco adb适配器发布XML消息。 表中有一列将日期存储为长值(以毫秒为单位) - 我们是否可以将此长值转换为XML编组的一部分日期?

-tia

5 个答案:

答案 0 :(得分:2)

您可以使用以下x-path将毫秒转换为日期时间xml值:

tib:add-to-dateTime(tib:translate-timezone('1970-01-01T00:00:00Z',  tib:get-timezone-from-dateTime(current-dateTime())), 0, 0, 0, 0, 0, (<your input in ms> div 1000))

这是做什么的:

1)找到你的时区:

tib:get-timezone-from-dateTime(current-dateTime())

2)将基准日期(1970-01-01)移动到正确的时区:

tib:translate-timezone('1970-01-01T00:00:00Z' <result above>)

3)在输入纪元中添加秒数:

tib:add-to-dateTime(<result above>, 0, 0, 0, 0, 0, (<your input in ms> div 1000))

请注意,此解决方案的缺点是失去毫秒精度。最终日期时间以秒为单位。

如果需要在最终结果中保留毫秒数,最好将其委托给外部Java库(如同已有人建议的那样)。您可以通过导入它轻松地在Designer映射器中使用Java方法。 Java自定义函数资源。

答案 1 :(得分:1)

我必须编写一个自定义的java进程来完成这项工作 - 以防有人发现它有用

答案 2 :(得分:0)

我已经遇到了这个问题。我们使用Adb中的选项将所有数据写入另一个表。您可以做什么然后执行以下操作

选项1 1.将另一个表的数据类型更改为varchar 2.更新触发器以进行e转换 3.在bw中更新方案。       - 这将使您无法再使用GUI来更新Adb

选项2 我们用于Adb的另一种模式是使用Adb作为动作的触发器。因此,我们不使用Adb的所有信息,而是使用密钥。我们对存储过程进行回调以检索其余部分。这是我们修复格式问题的地方。

因此,如果您熟悉在bw中执行db调用,则第二个选项是最简单且不易出错的选项。我们已经使用Tibco大约3年了,并且发现了对活动数据库适配器的一些限制。在幕后,它只是一个带有XML序列化的表池,并将消息放在队列/主题上

选项3 我使用的另一个选项是在BW过程中创建一个非常复杂的映射器。搜索空格并将其替换为“t” 希望这有帮助

答案 3 :(得分:0)

这对我有用,并且在最后得到没有'Z'的结果日期时间并且添加毫秒我恢复精度。现在只是为了解决夏令时......

的concat( 子( tib:add-to-dateTime(tib:translate-timezone('1970-01-01T00:00:00Z',tib:get-timezone-from-dateTime(current-dateTime())),0,0,0, 0,0,($ Element / root / s_date_in_ms div 1000)) ,1,19) , “”, 子($元素/根/ s_date_in_ms,12,3) )

2014-11-10T23:02:28.858

答案 4 :(得分:0)

tib:add-to-dateTime('1970-01-01T00:00:00', 0, 0, 0, 0,0, (<<timeinmillisecond>> div 1000))