我已使用实体管理器执行了一个查询。它从多个表返回数据。在这种情况下,我得到的是对象数组的列表。所以我写了一个循环如下。
for (Object[] row : rows) {
row[0]; //row[0] has the date from database as timestamp.
}
在这里 row[0]
是sql时间戳。
如果我们使用调试进行评估,我将得到带有结果的时间戳: 2020-05-27 18:37:39.0
.
我看得见 cdate
,一个私有变量,其值为 2020-05-27T18:37:39.000+0530
. 今天是公历日。我不能使用它,因为它是一个私有变量,并且类型为 BaseCalendar.Date
.
如果你做了一些事情,并将其转换为utc,我将得到 2020-05-27T13:07:39Z
但我想把它当作 2020-05-27T18:37:39.000+0530
3条答案
按热度按时间fykwrbwg1#
使用现代日期/时间api,如下所示:
tmb3ates2#
我也建议您使用java.time,即现代的java日期和时间api。如果可以,请修改查询以不返回老式的
Timestamp
而是一个Instant
或者至少是LocalDateTime
.然后您可以执行以下操作,例如:
本例的输出是,在亚洲/加尔各答时区运行时:
如果无法从查询中更改返回类型,则正确的转换为:
输出为:
请注意:不要使用任何字符串进行转换,存在更直接的转换。
我假设您使用的是该值,而不一定使用调试器中看到的相同格式。万一你真的想要那样的格式:你看到的是
BaseCalendar.Date.toString()
,它是国际标准ISO8601格式的变体。要获取它,请使用格式化程序。例如:链接
oracle教程:date time解释如何使用java.time。
维基百科文章:iso 8601
neekobn83#
你可以利用
java.time
,它使您能够在不考虑区域或偏移量的情况下解析datetime,但提供了在不更改或调整解析值的情况下随后添加区域或偏移量的可能性:这个输出