我正在从数据库请求中获取java.sql.Timestamp。此值指示时间的瞬间,因此时区不相关(因此,java.sql.Timestamp没有时区,因为它代表全局瞬间)。我希望使用dataweave将其转换为ISO8601 DateTime字符串,但是dataweave会将“我的本地时区(+10:00)”添加到该值。
请参见示例:
%dw 2.0
output application/json
import java!java::sql::Timestamp
---
{
epoch: 0 as DateTime,
epochFromDatabase: Timestamp::new(0) as DateTime
}
结果/预览为:
{
"epoch": "1970-01-01T00:00:00Z",
"epochFromDatabase": "1970-01-01T10:00:00Z"
}
您可以看到,尽管第二个值(epochFromDatabase)位于UTC(Z)中,但已添加了+10小时。
只能在dataweave中更正吗?我知道我能够在Java中更正此错误,但我只能使用dataweave / mule功能。
-EDIT-按照示例,这不是Java问题:
Timestamp epochTimestamp = new Timestamp(0);
System.out.println(epochTimestamp.toString());
System.out.println(epochTimestamp.toInstant().toString());
System.out.println(epochTimestamp.getTime());
写:
1970-01-01 10:00:00.0
1970-01-01T00:00:00Z
0
这样的toString确实暗示了本地时间(而不是iso8601),但是当转换为即时(toString的默认值为ISO8601)时,它是正确的。