如何在泰国语言环境中将日历更改为Gregorian

时间:2018-04-09 11:04:27

标签: java calendar internationalization locale

在我的Java 8u51应用程序中,我需要使用泰国语言环境 但是,我想用格里高利历而不是佛教日历。

我尝试用SPI替换java.util.Calendar的CalendarProvider,但它还没有解决。

import java.security.AccessController;
...
import sun.util.locale.provider.LocaleProviderAdapter;
import sun.util.spi.CalendarProvider;
...

public static void main(String[] args) {
    try {
        System.out.println(AccessController.doPrivileged(new sun.security.action.GetPropertyAction("java.locale.providers")));

        Locale l = Locale.getDefault(Locale.Category.FORMAT);
        CalendarProvider provider = LocaleProviderAdapter.getAdapter(CalendarProvider.class, l).getCalendarProvider();
        provider.getInstance(TimeZone.getDefault(), l);

        LocaleProviderAdapter.getAdapterPreference().forEach(o -> System.out.printf("Adapter: %s%n", o));
        System.out.printf("Provider: %s%n", provider.getClass());
        System.out.printf("Availables: %s%n", Calendar.getAvailableCalendarTypes());
        System.out.printf("Calendar: %s%n", Calendar.getInstance().getClass());
    }
    ...

src/META-INF/services/sun.util.spi.CalendarProvider如下。

sun.util.locale.provider.AlwaysGregorianCalendarProviderImpl

省略AlwaysGregorianCalendarProviderImpl的来源。
结果,

$ java -jar Sample.jar -Djava.locale.providers=SPI -Duser.language=th -Duser.country=TH
SPI
Adapter: SPI
Adapter: FALLBACK
Provider: class sun.util.locale.provider.CalendarProviderImpl
Availables: [gregory, buddhist, japanese]
Calendar: class sun.util.BuddhistCalendar

将使用佛教日历 如何将其更改为公历?

1 个答案:

答案 0 :(得分:0)

回复迟到。
Sun的SPI实现不允许外部扩展。它还会检查已划分的内部类的文件名。 尽管我没有详细调查,但即使使用CLDRLocaleProviderAdapter,它似乎也无法应付。