Java 本地化日期格式,不含年份和Joda时间

Java 本地化日期格式,不含年份和Joda时间,java,jodatime,Java,Jodatime,我正在努力实现以本地格式显示日期,但没有年份。因此,我们应该: 6月12日英国 6月12日对我们来说 有没有可能用乔达的时间来实现 我们尝试了“dd-MMMM”模式,但不起作用。 我们已经尝试了StringFormat.longDate()和strip year info,但是还有更优雅的解决方案吗?在封面下,JodaTime使用JDK的java.text.DateFormat.getDateInstance(int-style,Locale-aLocale)-请参阅org.joda.tim

我正在努力实现以本地格式显示日期,但没有年份。因此,我们应该:

  • 6月12日英国
  • 6月12日对我们来说
有没有可能用乔达的时间来实现

我们尝试了“dd-MMMM”模式,但不起作用。
我们已经尝试了
StringFormat.longDate()
和strip year info,但是还有更优雅的解决方案吗?

在封面下,JodaTime使用JDK的
java.text.DateFormat.getDateInstance(int-style,Locale-aLocale)
-请参阅
org.joda.time.format.StyleFormatter\getPattern(Locale-Locale)
它如何委托给
java.text.DateFormat

String getPattern(Locale locale) {
    DateFormat f = null;
    switch (iType) {
        case DATE:
            f = DateFormat.getDateInstance(iDateStyle, locale);
            break;
        case TIME:
            f = DateFormat.getTimeInstance(iTimeStyle, locale);
            break;
        case DATETIME:
            f = DateFormat.getDateTimeInstance(iDateStyle, iTimeStyle, locale);
            break;
    }
    if (f instanceof SimpleDateFormat == false) {
        throw new IllegalArgumentException("No datetime pattern for locale: " + locale);
    }
    return ((SimpleDateFormat) f).toPattern();
}
因此,每个语言环境的格式都嵌入到JDK中,甚至没有嵌入到JodaTime中

使用此代码,您可以获得不同地区的预定义模式和输出:

public static void main(String[] args) {
    DateTime dt = DateTime.now();

    String usFormat = DateTimeFormat.patternForStyle("L-", Locale.US);
    String ukFormat = DateTimeFormat.patternForStyle("L-", Locale.UK);

    System.out.println(dt.toString(usFormat));
    System.out.println(dt.toString(ukFormat));
}
印刷品

October 20, 2015
20 October 2015
但是,模式仅为四种样式预定义:短、中、长和全,分别适用于日期和时间部分。请参阅以下文件的JavaDoc:

第一个字符是日期样式,第二个字符是时间样式。为短样式指定“S”,为中样式指定“M”,为长样式指定“L”,为全样式指定“F”。日期或时间可以通过指定样式字符“-”来输入


因此,如果要删除年份部分,则需要对从
DateTimeFormat.patternForStyle()获取的模式进行后期处理。这可以通过删除所有的“Y”和“Y”字符来实现,但一般来说,如果您想对任意区域设置执行此操作,可能会产生一些混乱的模式。

String date=LocalDate.now().toString(“dd MMMM”)
@Tiny所以对美国和英国来说会有所不同?我不知道API是否会根据给定的语言环境自动更改其格式(它应该直观地更改格式,但我选择对此保持沉默,因为我自己没有这样做)。如果没有,则使用API的应用程序将负责根据所选区域设置提供/提供适当的日期格式。@Tiny不会。如果您要求joda time使用dd-MMMM模式格式化日期,它将使用dd-MMMM模式。不是,谢谢你,亚当!这是一个更好的解决方案,因为我从已经格式化的字符串中删除了year,但我可以使用填充更安全、更干净的模式进行操作