2

以下代码段使用 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?

4

2 回答 2

1

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

于 2013-10-15T04:06:51.807 回答
0

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

于 2016-01-11T20:00:34.220 回答