首页 > 解决方案 > 如何使用自定义 ResourceBundle of Locale 使用日期时间格式化程序(Java 8)打印日期时间?

问题描述

我试图在我的代码中获得对多个语言环境的支持。为此,我需要支持不同地区的日期和时间。但限制是这个日期和时间没有完全本地化。例如,

2019 年 7 月 27 日,星期六,上午 11:24

因为 hi-IN 被翻译成

27 जुलाई 2019, शनिवार, 11:24 पूर्वाह्न</p>

但我需要的输出是:

2019 年 2 月 27 日上午 11:24

或者

2019 年 2 月 27 日,星期六,上午 11:24

需要知道这是正确的方法还是有其他方法可以正确解决此问题。

我正在尝试将自定义语言环境传递给 DateTimeFormatter 例如:

return DateTimeFormat.forPattern(format).withLocale(new Locale("hi", "IN", "custom"));

并尝试拥有像这样的资源包

sun.text.resources.hi.FormatData_hi_IN_custom

如同

sun.text.resources.hi.FormatData_hi_IN

但是用AM等替换了पूर्वाह्न。但这并没有被采纳。

我正在使用的自定义资源文件

package sun.util.resources.hi;

import sun.util.resources.ParallelListResourceBundle;

public class FormatData_hi_IN_custom extends ParallelListResourceBundle {
    public FormatData_hi_IN_custom() {
    }

    protected final Object[][] getContents() {
        return new Object[][]{{"MonthNames", new String[]{"जनवरी", "फ़रवरी", "मार्च", "अप्रैल", "मई", "जून", "जुलाई", "अगस्त", "सितंबर", "अक्\u200dतूबर", "नवंबर", "दिसंबर", ""}}, {"MonthAbbreviations", new String[]{"जनवरी", "फ़रवरी", "मार्च", "अप्रैल", "मई", "जून", "जुलाई", "अगस्त", "सितंबर", "अक्\u200dतूबर", "नवंबर", "दिसंबर", ""}}, {"MonthNarrows", new String[]{"ज", "फ़", "मा", "अ", "म", "जू", "जु", "अ", "सि", "अ", "न", "दि", ""}}, {"DayNames", new String[]{"रविवार", "सोमवार", "मंगलवार", "बुधवार", "गुरुवार", "शुक्रवार", "शनिवार"}}, {"DayAbbreviations", new String[]{"रवि", "सोम", "मंगल", "बुध", "गुरु", "शुक्र", "शनि"}}, {"DayNarrows", new String[]{"र", "सो", "मं", "बु", "गु", "शु", "श"}}, {"AmPmMarkers", new String[]{"AM", "PM"}}, {"Eras", new String[]{"ईसापूर्व", "सन"}}, {"short.Eras", new String[]{"ईसापूर्व", "सन"}}, {"NumberElements", new String[]{".", ",", ";", "%", "०", "#", "-", "E", "‰", "∞", "�"}}, {"TimePatterns", new String[]{"h:mm:ss a z", "h:mm:ss a z", "h:mm:ss a", "h:mm a"}}, {"DatePatterns", new String[]{"EEEE, d MMMM, yyyy", "d MMMM, yyyy", "d MMM, yyyy", "d/M/yy"}}, {"DateTimePatterns", new String[]{"{1} {0}"}}, {"DateTimePatternChars", "GyMdkHmsSEDFwWahKzZ"}};
    }
}

并尝试运行它:

        System.out.println(DateTimeFormat.forPattern("dd-MMM-YYYY, EEE, HH-mm a").withLocale(new Locale("hi", "IN", "custom")).print(System.currentTimeMillis()));

标签: javadatetimeformatinfo

解决方案


推荐阅读