1

我正在尝试使用监视表的 tibco adb 适配器发布 XML 消息。表中有一个列将日期存储为以毫秒为单位的长值 - 有没有一种方法可以将这个长值转换为日期作为 XML 编组的一部分?

-tia

4

5 回答 5

3

您可以使用以下 x 路径将毫秒转换为日期时间 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 库(正如有人已经建议的那样)。您可以通过 Java 自定义函数导入 Java 方法,从而轻松地在 Designer 映射器中使用它资源。

于 2014-01-16T19:46:27.923 回答
1

我必须编写一个自定义的 Java 进程来完成这项工作——以防万一有人觉得它有用

于 2010-04-01T17:58:28.753 回答
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) , ".", substring($Element/root/s_date_in_ms,12,3) )

2014-11-10T23:02:28.858

于 2015-01-08T09:45:22.017 回答
0

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

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

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

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

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

于 2013-01-22T02:12:52.187 回答
0
tib:add-to-dateTime('1970-01-01T00:00:00', 0, 0, 0, 0,0, (<<timeinmillisecond>> div 1000))
于 2019-08-15T18:41:19.980 回答