在Joda-Time上将mediumDate()转换为其他格式(使用Locale)

时间:2014-06-23 22:58:10

标签: java date datetime converter jodatime

我在java中使用其他格式转换日期时遇到了问题(我使用Joda-Time)。事实上,我的格式化本地日期是:

24/giu/14 (Italian format date...but other local formats are possible)

我想在输出中看到这一点(使用Locale格式日期):

24/06/2014

我尝试构建示例代码,但不起作用......我做错了什么?

public String DateConvertFromMediumFormatToSlash (String date)
    {
        DateTimeFormatter dtf = DateTimeFormat.mediumDate().withLocale(Locale.getDefault());
        LocalDate dt = dtf.parseLocalDate(date);

        return dt.toString(); // output: 2014-06-24
    }

1 个答案:

答案 0 :(得分:3)

关于您输入的内容和输出的内容,您的问题很混乱。

意大利使用连字符,而不是斜线

但有一个问题似乎是斜线。 Joda-Time希望连字符不是斜线。下面是一些使用Joda-Time 2.3的示例代码,使用适用于Locale of Italy的中等格式显示LocalDate的字符串形式。

LocalDate localDate = new LocalDate( 2014, 6, 24 );
System.out.println( "localDate: " + localDate );

DateTimeFormatter formatter = DateTimeFormat.mediumDate().withLocale( Locale.ITALY );
System.out.println( "output: " + formatter.print( localDate ) );

跑步时......

localDate: 2014-06-24
output: 24-giu-2014

定义斜杠格式化程序

因此,如果要解析/生成带斜杠的字符串而不是意大利语Locale所期望的连字符,则必须明确定义这样的格式化程序。

String input = "24/giu/14";
DateTimeFormatter formatterInput = DateTimeFormat.forPattern( "dd/MMM/yy").withLocale( Locale.ITALY );
LocalDate localDate = formatterInput.parseLocalDate( input );
System.out.println( "localDate: " + localDate );

DateTimeFormatter formatterOutput = DateTimeFormat.forPattern( "dd/MM/yy").withLocale( Locale.ITALY ); // Locale not needed here, but it's a good habit to specify.
String output = formatterOutput.print( localDate );
System.out.println( "Output: " + output );

跑步时......

localDate: 2014-06-24
Output: 24/06/14

顺便说一句,今年使用两位数就是要求麻烦恕我直言。