将 Joda-Time 转换为 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?

Java Timestamp.toString() UTC输出(尽管在javadoc中没有说太多,但源代码不使用时区信息)。 由于您的原始日期/时间采用 UTC,因此您将看到完全相同的输出。

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

  • 将特定区域中的日期/时间插入MySQL数据库
  • 如何使用EclipseLink和Joda-Time将UTC格式的日期时间存储到数据库中?

相关内容

  • 没有找到相关文章

最新更新