您好,我注意到使用“区域”创建的Joda DateTime正在根据“当前系统日期”返回到“日期”。我期望toDate根据创建的DateTime返回。根据Joda API,它说 toDate应该返回以此日期时间初始化的日期。我在Maven中使用Joda 2.9.4。来自古鲁斯的任何想法都在
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
答案 0 :(得分:3)
正如安迪所说,日期将没有任何特定的时区信息。如果您想在没有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);
答案 1 :(得分:2)
打印java.util.Date
将始终使用JVM的默认时区,因为Date
实际上并不包含任何时区信息。
这样,如果rdt.toDate()
也以IST打印,则打印ldt.toDate()
的结果将以IST打印。