Android 如何使用Joda DateTime显示荷兰月份

Android 如何使用Joda DateTime显示荷兰月份,android,datetime,kotlin,jodatime,datetime-format,Android,Datetime,Kotlin,Jodatime,Datetime Format,我想让大家看看荷兰的几个月。但是这个月是用英文印刷的。这需要从Android API 19和更高版本开始工作 compile 'joda-time:joda-time:2.9.9' val test = DateTime() val l = Locale("nl_NL") // Dutch language, Netherlands country. val f = DateTimeFormat.forPattern("dd MMM yyyy").withLocale(l) val tex

我想让大家看看荷兰的几个月。但是这个月是用英文印刷的。这需要从Android API 19和更高版本开始工作

compile 'joda-time:joda-time:2.9.9'

val test = DateTime()

val l = Locale("nl_NL")  // Dutch language, Netherlands country.
val f = DateTimeFormat.forPattern("dd MMM yyyy").withLocale(l)
val text = f.print(test)
打印出:

2017年10月26日

应该是:

2017年12月26日


您必须使用
语言环境
,该语言环境在单独的参数中接收语言和国家代码:

val l = Locale("nl", "NL") 
这样,输出为:

2017年12月26日

在我的测试中,输出不是您想要的大写
Okt
,而是API中内置的,我们无法控制它。如果要将
Okt
作为输出,则必须自己操作字符串。

正确答案:

    val l = Locale("nl", "NL")
    val f = DateTimeFormat.forPattern("dd MMM yyyy").withLocale(l)

    val dateStr = f.print(dateTime).substring(3, 4).toUpperCase()
    val capitalizedDate = StringBuilder(f.print(dateTime))
    capitalizedDate.setCharAt(3, dateStr[0])

    return capitalizedDate.toString().replace(".", "")

我已经回答了一个类似的问题。您可以使用
日历
对象获取本地化的月份名称

private String getMonthName(final int index, final Locale locale, final boolean shortName)
{
    String format = "%tB";

    if (shortName)
        format = "%tb";

    Calendar calendar = Calendar.getInstance(locale);
    calendar.set(Calendar.MONTH, index);
    calendar.set(Calendar.DAY_OF_MONTH, 1);

    return String.format(locale, format, calendar);
}
完整月份名称示例:

System.out.println(getMonthName(0, new Locale("NL"), false));
System.out.println(getMonthName(2, new Locale("NL"), true));
结果:
1月份

短月份名称示例:

System.out.println(getMonthName(0, new Locale("NL"), false));
System.out.println(getMonthName(2, new Locale("NL"), true));

结果:
1月

可以使用substring()和toUpperCase()完成从okt到okt的转换。这个问题有很多解决方法。在荷兰语中,月份通常不是以资本开始的,所以API是正确的。