根据用户的时区将字符串转换为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没有区别。
答案 0 :(得分:1)
java.sql.Timestamp.toString()
将在当前时区打印时间戳,而不是UTC。
价值是正确的,你只是打错了。
Timestamp
的内部值与UTC一样,与所有其他java.util.Date
类一样。