Joda日期时间在Java 8与Java 11之间返回的结果非常不同

问题描述 投票:0回答:1

如果我在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日期时间的错误还是新功能?

UPDATE我正在使用Joda v2.10.5。另外,此代码:-

package au.com.tt.agora.debug.web;

import java.time.format.DateTimeFormatter;导入java.util.TimeZone;

import 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。

UPDATE 2原来这是一个语言环境问题。在Java 8和Java 11之间,某些语言环境(特别是en_AU和en_CA)处理日期的方式发生了变化。请参阅此处以获取更多详细信息:-

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

必须解决在这种情况下我必须做的事情,但至少我了解这个问题。

java java-8 jodatime java-11
1个回答
1
投票

原来这是一个语言环境问题。在Java 8和Java 11之间,某些语言环境(特别是en_AU和en_CA)处理日期的方式发生了变化。请参阅此处以获取更多详细信息:-

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

必须解决在这种情况下必须要做的事情,但至少我了解问题所在

© www.soinside.com 2019 - 2024. All rights reserved.