Joda DateTime toDate returns 不符合创建的日期时间

Joda DateTime toDate returns not as per Created DateTime

您好,我注意到使用 Zone 创建的 Joda DateTime returning toDate 根据当前系统日期。根据 Created DateTime,我期望 toDate 为 return。根据 Joda API,它说 toDate 应该 return 使用此 datetime 初始化日期。我在我的 Maven 中使用 Joda 2.9.4。 SO

中大师的任何想法
public class TestJodaError {

public static void main(String[] args) {
    DateTime ldt = new DateTime();
    System.out.println("Local dt: " + ldt + " toDate: " + ldt.toDate());

    String tzId = "Asia/Singapore";
    ZoneId zoneId = ZoneId.of(tzId);
    ZonedDateTime zdt = ZonedDateTime.now(zoneId);

    DateTimeZone dtZone = DateTimeZone.forID(zdt.getZone().getId());
    DateTime rdt = new DateTime(dtZone);
    System.out.println("Remote dt: " + rdt + " toDate: " + rdt.toDate());
}}

结果是

Local dt: 2019-05-17T11:33:30.333+05:30 toDate: Fri May 17 11:33:30 IST 2019
Remot dt: 2019-05-17T14:03:30.738+08:00 toDate: Fri May 17 11:33:30 IST 2019

预期结果

Remot dt: 2019-05-17T14:03:30.738+08:00 toDate: Fri May 17 14:03:30 SGT 2019

打印 java.util.Date 将始终使用 JVM 的默认时区,因为 Date 实际上不包含任何时区信息。

因此,打印 rdt.toDate() 的结果将在 IST 中打印,如果 ldt.toDate() 也在 IST 中打印。

正如 Andy 提到的,Date 不会有任何特定的时区信息。如果您想在没有 Joda 时间的情况下使用并想利用 Java 8,我在下面提供了代码片段。

LocalDateTime ldt = LocalDateTime.of(2019, Month.MAY, 17, 11, 30);
ZonedDateTime klDateTime = ldt.atZone(ZoneId.of("Asia/Kolkata"));
DateTimeFormatter indianFormat = DateTimeFormatter.ofPattern("dd MMM yyyy");

String output = klDateTime.format(indianFormat);