如何从Java中的月份字符串获取月份数?

时间:2014-01-06 13:31:36

标签: java android jodatime

我有这个字符串

  

23 / Gennaio / 2014

我需要这个其他字符串

  

23/01/2014

我尝试使用joda.time

DateTimeFormatter format =  DateTimeFormat.forPattern("dd/MMM/yyyy").withLocale(Locale.ITALY);
DateTime instance = format.parseDateTime("23/Gennaio/2014");  
String month_number = String.valueOf(instance.getMonthOfYear());

但我得到了这个例外:

  

01-06 13:31:55.341:E / AndroidRuntime(1116):java.lang.IllegalArgumentException:格式无效:“23 / Gennaio / 2014”

我错过了什么?

4 个答案:

答案 0 :(得分:5)

似乎期望月份名称为小写(不确定原因):

DateTime instance = format.parseDateTime("23/Gennaio/2014".toLowerCase(Locale.ITALIAN));

应该更好。

答案 1 :(得分:2)

23 / Gennaio / 2014 不是要解析的有效日期字符串。
尝试 23 / gennaio / 2014 并尝试使用“dd / MMMM / yyyy”格式解析(添加 M

答案 2 :(得分:1)

为什么不是纯粹的java?

 SimpleDateFormat formatIn = new SimpleDateFormat("dd/MMM/yyyy", Locale.ITALY);
 Date instance = formatIn.parse("23/Gennaio/2014");  
 SimpleDateFormat formatOut = new SimpleDateFormat("dd/MM/yyyy", Locale.ITALY);

 System.out.println(formatOut.format(instance));

 String month_number = String.valueOf(instance.getMonth()); //DEPRECETDE USE CALENDAR

结果是“2014年1月23日”

答案 3 :(得分:0)

使用此代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    String dateString = "23/Gennaio/2014";


     Log.i("meenal","Date 2:"+localizeDate(dateString, Locale.ITALY));


}

private String localizeDate(String inputdate, Locale locale) { 

    Date date = new Date();
    SimpleDateFormat dateFormatCN = new SimpleDateFormat("dd/MMM/yyyy", locale);       
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");


    try {
        date = dateFormatCN.parse(inputdate);

        Log.i("meenal", "Date:"+date);
    } catch (Exception e) {
        Log.e("meenal", e.getMessage(),e);
        return inputdate;
    }
    return dateFormat.format(date);
}