首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数据编织中将java.sql.timestamp转换为DateTime

在数据编织中将java.sql.timestamp转换为DateTime
EN

Stack Overflow用户
提问于 2020-05-18 08:38:45
回答 2查看 1.1K关注 0票数 0

我正在从数据库请求中获得一个java.sql.Timestamp。此值表示时间上的瞬间,因此时区与此无关(因此,java.sql.Timestamp没有时区,因为它代表全局瞬间)。我希望使用数据编织将其转换为ISO8601 DateTime字符串,但是数据编织将“添加”我的本地时区(+10:00)到值中。

见示例:

代码语言:javascript
复制
%dw 2.0
output application/json
import java!java::sql::Timestamp
---

{
   epoch: 0 as DateTime,
   epochFromDatabase: Timestamp::new(0) as DateTime
}

如果结果/预览是:

代码语言:javascript
复制
{
  "epoch": "1970-01-01T00:00:00Z",
  "epochFromDatabase": "1970-01-01T10:00:00Z"
}

您可以看到,尽管在UTC(Z)中,第二个值(epochFromDatabase)已经添加了+10小时。

这只能用数据编织来纠正吗?我知道我可以在java中纠正这一点,但我必须只使用数据编织/骡子特性。

---这不是一个java问题,例如:

代码语言:javascript
复制
Timestamp epochTimestamp = new Timestamp(0);
System.out.println(epochTimestamp.toString());
System.out.println(epochTimestamp.toInstant().toString());
System.out.println(epochTimestamp.getTime());

写:

代码语言:javascript
复制
1970-01-01 10:00:00.0
1970-01-01T00:00:00Z
0

因此,toString确实意味着一个本地时间(而不是在iso8601中),但是当转换为一个瞬间( toString默认为iso8601)时,这是正确的。

EN

回答 2

Stack Overflow用户

发布于 2020-05-18 14:09:39

DateTime总是有一个时区。您可以尝试一个没有LocalDateTime的:

代码语言:javascript
复制
epochFromDatabase: Timestamp::new(0) as LocalDateTime

输出:

代码语言:javascript
复制
"epochFromDatabase": "1969-12-31T21:00:00"
票数 2
EN

Stack Overflow用户

发布于 2020-05-23 22:10:30

我只是在这里添加我的想法,以便您可以作出您的解决办法,如上述评论;

-- DataWeave中日期时间的默认格式实际上是ISO8601。因此,我们不需要指定格式字符串,也不需要分别格式化两个成员。

我在这里什么也看不见。

如果您在日期中看到类似的不匹配,那么您可以尝试像下面这样定义TimeZone。

代码语言:javascript
复制
%dw 2.0
output application/json
var utc = "UTC" as TimeZone
fun getFormattedDateTimeZoneBased()=(now() >> utc) as String
---
{
  myDate: getFormattedDateTimeZoneBased()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61865619

复制
相关文章

相似问题

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