在 Java 8 上运行的应用程序中,我有一个 Date 对象。该对象的时区取决于客户端的位置。
在某一特定时刻,我需要将此日期转换为 GMT,以便它可以与我从数据库访问的值进行比较。
我尝试了 SimpleDateFormat 和 ZonedDateTime,但有一个痛点。这些 API 为我提供了字符串值形式的 GMT 时间,这非常好。但是,一旦我解析它并将其分配给 Date 对象,它就会回到我的本地时区!
例如:
public class TimeZoneDemo {
public static void main(String[] args) throws ParseException {
Date istDate = Calendar.getInstance().getTime();
ZonedDateTime gmtTime = istDate.toInstant().atZone(ZoneId.of("GMT"));
System.out.println(gmtTime);
Date gmtDate = Date.from(gmtTime.toInstant());
System.out.println(gmtDate);
}
}
在上面的代码中,gmtTime显示与 GMT 时区相关的正确值,但gmtDate(Date 对象)打印本地时区的值。
PS:我的最终目标是在 java.sql.TimeStamp 对象中拥有 GMT 值。
如何才能实现这一目标?
更新 1: 查看评论和回复后,我了解到 Date 对象只保存一个包含毫秒的长值。 但是,我的期望是,当执行此行时:
Date gmtDate = Date.from(gmtTime.toInstant());
无论对象gmtTime包含什么时间,我都需要在 TimeStamp 或 Date 对象中捕获该时间。动机是能够与数据库中保存的值进行比较。我将日期作为参数传递给我的 SQL 查询。
有人可以帮我理解如何实现这一点吗?
MMMHUHU
长风秋雁
收到一只叮咚
相关分类