【发布时间】:2020-07-26 16:49:54
【问题描述】:
如果我在 Java 8 中运行以下代码:-
package au.com.tt.agora.debug.web;
import java.util.TimeZone;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
public class Test
{
public static void main(String[] args)
{
String newDate = new LocalDate().toString("ddMMMyy");
System.out.println(newDate);
System.out.println(TimeZone.getDefault());
System.out.println(DateTimeZone.getDefault());
}
}
我得到这个结果:-
14Apr20
sun.util.calendar.ZoneInfo[id="Australia/Sydney",offset=36000000,dstSavings=3600000,useDaylight=true,transitions=142,lastRule=java.util.SimpleTimeZone[id=Australia/Sydney,offset=36000000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=9,startDay=1,startDayOfWeek=1,startTime=7200000,startTimeMode=1,endMode=3,endMonth=3,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=1]]
Australia/Sydney
我在 Java 11 中运行相同的代码,得到以下结果:-
14Apr.20
sun.util.calendar.ZoneInfo[id="Australia/Sydney",offset=36000000,dstSavings=3600000,useDaylight=true,transitions=142,lastRule=java.util.SimpleTimeZone[id=Australia/Sydney,offset=36000000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=9,startDay=1,startDayOfWeek=1,startTime=7200000,startTimeMode=1,endMode=3,endMonth=3,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=1]]
Australia/Sydney
注意 . 4 月到 20 日之间。这是 Java 11 中 Joda 日期时间的错误还是新功能?
更新 我正在使用 Joda v2.10.5。另外,这段代码:-
包au.com.tt.agora.debug.web;
导入 java.time.format.DateTimeFormatter; 导入 java.util.TimeZone;
导入 org.joda.time.DateTimeZone; 导入 org.joda.time.LocalDate;
public class Test
{
public static void main(String[] args)
{
LocalDate joda = new LocalDate();
java.time.LocalDate date = java.time.LocalDate.of(joda.getYear(), joda.getMonthOfYear(), joda.getDayOfMonth());
System.out.println(date.format(DateTimeFormatter.ofPattern("ddMMMyy")));
System.out.println(TimeZone.getDefault());
System.out.println(DateTimeZone.getDefault());
}
}
对日期产生相同的结果。我在 Windows 上使用 Java 11.0.6。
更新 2 原来这是一个语言环境问题。在 Java 8 和 Java 11 之间,某些语言环境(特别是 en_AU 和 en_CA)处理日期的方式发生了变化。详情请看这里:-
https://bugs.openjdk.java.net/browse/JDK-8211750
必须弄清楚在这种情况下我必须做什么,但至少我了解问题所在。
【问题讨论】:
-
您的
name: 'joda-time'版本是什么?我对jdk-11和joda time 版本version: '2.10.5'没有任何问题 -
@Deadpool 我已更新票证。该问题也适用于 Java LocalDate。
-
这是 CLDR。这回答了你的问题了吗? SimpleDateFormat .format() gives different results in Java8 vs. Java11 [duplicate]。或this 或this?
-
感谢@OleV.V。在我意识到真正的问题是什么后,我发现了这些问题。
标签: java java-8 jodatime java-11