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

时间:2016-03-05 22:08:28

标签: java timestamp jodatime

根据用户的时区将字符串转换为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没有区别。

1 个答案:

答案 0 :(得分:1)

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

价值是正确的,你只是打错了。

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