如何制作java.sql.Timestamp UTC时间?

How do I make java.sql.Timestamp UTC time?

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void main(String[] args) {

    LocalDateTime ldt = LocalDateTime.now();

    ZonedDateTime zdt = ZonedDateTime.of(ldt, ZoneId.systemDefault());

    Instant instant = Instant.from(zdt);

    Timestamp timestamp = Timestamp.from(instant);

    System.out.println(ldt +"
"
);

    System.out.println(zdt +"
"
);

    System.out.println(instant +"
"
);

    System.out.println(timestamp +"
"
);
}

它打印:

1
2
3
4
5
6
7
2017-05-07T18:13:26.969

2017-05-07T18:13:26.969-04:00[America/New_York]

2017-05-07T22:13:26.969Z

2017-05-07 18:13:26.969

如何在与Instant相同的时间内进行SQL Timestamp保存? 我需要能够从任何地方获得Timestamp并将其转换为它在世界的任何时间。 问题在于它与我的系统时钟恰好设置在同一时间保存。


您最好从LocalDateTime获取Timestamp,而不是从Instant获取。

第一步是将ZonedDateTime转换为GMT:

1
ZonedDateTime gmt = zdt.withZoneSameInstant(ZoneId.of("GMT"));

然后你可以通过LocalDateTime将它转换为Timestamp

1
Timestamp timestamp = Timestamp.valueOf(gmt.toLocalDateTime());


如果要表示"TIMESTAMP WITH TIME ZONE"值,则可能需要使用带有Calendar对象的setTimestamp的特定重载。