将Joda-Time转换为UTC区域中的时间戳

时间:2013-10-15 04:00:37

标签: java timezone timestamp jodatime utc

以下代码段格式并使用Joda-Time API将日期转换为UTC区域。

DateTimeFormatter dateTimeFormatter=DateTimeFormat.forPattern("dd-MMM-yyyy hh:mm:ss aa");
DateTime dateTime = dateTimeFormatter.parseDateTime("15-Oct-2013 11:34:26 AM").withZone(DateTimeZone.UTC);        
System.out.println(dateTime);

它完全按预期显示以下日期。

2013-10-15T06:04:26.000Z

但是当这个日期像这样转换为java.sql.Timestamp时,

System.out.println(new Timestamp(dateTime.getMillis()));

显示以下日期。

2013-10-15 11:34:26.0

这意味着与给定的日期/时间相同。时区UTC似乎被忽略了。


如何让Timestamp将日期正确转换为UTC?

2 个答案:

答案 0 :(得分:1)

UTC中的Timestamp.toString()输出(虽然它在javadoc中没有说明,但是源没有使用TimeZone信息)。由于您的原始日期/时间是UTC,因此您将看到完全相同的输出。

答案 1 :(得分:0)

尽管println()方法在控制台上显示Timestamp#toString()方法时隐式使用new Timestamp(dateTime.getMillis())方法,而控制台又使用当前JVM时区显示日期时间(JVM时区是系统时区)默认情况下,操作系统使用),问题的初衷是将attr持久保存到带有UTC区的MySQL数据库,由于以下相关答案中提到的原因,这不会发生