如何将 Fucking DateTime(UTC) 转换为 java.sql.Timestamp(UTC)?

How do I convert a Joda DateTime(UTC) to a java.sql.Timestamp(UTC)?

当根据用户时区将字符串转换为 UTC 中的 Joda DateTime,然后将其转换为 java.sql.Timestamp 时,它会变回东部时间。

DateTimeZone usersTimezone = DateTimeZone.forID("America/New_York");
String DATE_FORMAT = "MM/dd/yyyy hh:mm aa";
DateTimeFormatter DATETIME_FORMATTER = DateTimeFormat.forPattern(DATE_FORMAT);
DateTime date = DATETIME_FORMATTER.withZone(usersTimezone).parseDateTime("03/06/2016 5:30 AM");
DateTime utcDateTime = date.toDateTime(DateTimeZone.UTC);

java.sql.Timestamp utcTimestamp = new java.sql.Timestamp(utcDateTime.getMillis());

System.out.println(" UTC DATETIME: " + utcDateTime);
System.out.println("UTC TIMESTAMP: " + utcTimestamp);

打印以下内容:

UTC DATETIME: 2016-03-06T10:30:00.000Z
UTC TIMESTAMP: 2016-03-06 05:30:00.0

为什么时间戳转换回东部时区?我想将它作为 UTC 时间戳输入到数据库中吗?

注意:将我服务器的时区更改为 UTC 没有任何区别。

java.sql.Timestamp.toString() 将打印当前时区的时间戳,而不是 UTC。

这个值是正确的,你只是打印错了。

Timestamp 的内部值与所有其他值一样 java.util.Date 类。