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);
您好,我注意到使用 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);