在我的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
将使用佛教日历 如何将其更改为公历?
答案 0 :(得分:0)
回复迟到。
Sun的SPI实现不允许外部扩展。它还会检查已划分的内部类的文件名。
尽管我没有详细调查,但即使使用CLDRLocaleProviderAdapter,它似乎也无法应付。