Joda Date Time在Java8和Java11之间返回非常不同的结果

Joda Date Time在Java8和Java11之间返回非常不同的结果,java,java-8,jodatime,java-11,Java,Java 8,Jodatime,Java 11,如果我在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

如果我在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日之间。这是一个bug还是Java11中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上使用Java11.0.6

更新2 事实证明这是一个区域设置问题。在Java8和Java11之间,某些地区(特别是en_-AU和en_-CA)处理日期的方式发生了变化。有关更多详细信息,请参见此处:-


我必须弄清楚在这种情况下我必须做什么,但至少我理解这个问题。

结果证明这是一个区域设置问题。在Java8和Java11之间,某些地区(例如en_-AU和en_-CA)处理日期的方式发生了变化。有关更多详细信息,请参见此处:-


我必须弄清楚在这种情况下我必须做什么,但至少我了解问题所在

你的
名字是什么:'joda time'
版本?我对jdk-11和joda time版本没有任何问题:'2.10.5'@Deadpool我已经更新了票证。这个问题也适用于JavaLocalDate,它是CLDR。这回答了你的问题吗。还是?谢谢@OleV.V。在我意识到真正的问题是什么之后,我发现了这些问题。很好的研究。然而,您的示例中的时区代码是不相关的,只是混淆了。使用JRE启动参数
-Djava.locale.providers=COMPAT
将是一个选项。或者更好:您将习惯于更改的本地化样式,因为底层CLDR文本资源不是一成不变的,您不应该将任何重要逻辑建立在文本样式上。