Joda Date Time在Java 8和Java 11之间返回的结果非常不同

2022-05-29 00:00:00 java-11 java-8 java jodatime

如果我在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 Date Time的错误还是新功能?

更新 我使用的是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

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


解决方案

原来是区域设置问题。在Java 8和Java 11之间,某些地区(例如en_AU和en_CA)处理日期的方式发生了变化。有关更多详细信息,请查看此处:-

https://bugs.openjdk.java.net/browse/JDK-8211750

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

相关文章