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