如何将EditText日期拆分为Calendar对象的年,月和日整数?

时间:2015-09-28 01:14:50

标签: android string datepicker

我有一个用户从UI上的EditText行上的DatePicker输入日期。我想将日期分为年,月和日,这样我就可以将这3个元素分成一组。我得到这个致命的异常消息'“NumberFormatException:Invalid int:”2015“'。所以看起来它不喜欢年份拆分。也许在2015年之后有一个空间导致错误。什么是我在这里失踪了?

部分活动文件:

...
private ListenerEditText fListenerEditText;
private int year;
private int month;
private int day;

Calendar c = Calendar.getInstance();
String dateStr = fListenerEditText.getText().toString();
String[]dateParts = dateStr.split("/");
year = Integer.parseInt(dateParts[2]);
month = Integer.parseInt(dateParts[0]);
day = Integer.parseInt(dateParts[1]);
c.set(year, month, day);
Bundle argsbundle = new Bundle();
argsbundle.putInt("year", c.get(Calendar.YEAR));
...

3 个答案:

答案 0 :(得分:1)

这是因为“2015”末尾有一个尾随空格。

以下内容会导致同样的崩溃:

    Integer.parseInt("2015 ");

我会做一个像这样的方法:

public int safeParseInt(String number) throws Exception {
    if(number != null) {
        return Integer.parseInt(number.trim());
    } else {
        throw new NullPointerException("Date string is invalid"); 
    }
}

然后你可以这样做:

try {
    year = safeParseInt(dateParts[2]);
    month = safeParseInt(dateParts[0]);
    day = safeParseInt(dateParts[1]);
} catch (Exception e) {
    // SHOW SOME MESSAGE TO THE USER
}

答案 1 :(得分:1)

我已经过测试,但它的工作正常,因此您的分割代码是正确的。

String dateStr = "01/01/2015";
String[]dateParts = dateStr.split("/");
year = Integer.parseInt(dateParts[2]); //=> 2015
month = Integer.parseInt(dateParts[0]); //=> 01
day = Integer.parseInt(dateParts[1]); //=> 01

因此,我认为问题在于您的输入数据(user entered date from a DatePicker)= dateStr
您应该使用this来检查用户在获​​取数据之前输入的格式日期 如果您知道您的数据始终包含空格,则应通过trim()方法

将其删除

请记住

c.set(year, month, day);

01表示月份为2月,因此您应将其更改为

c.set(year, month-1, day);

希望这个帮助

答案 2 :(得分:1)

这种方法会更好。

SimpleDateFormat sdf  =   new SimpleDateFormat("yyyy-MM-dd");
    try{
        Date date=sdf.parse("2015-09-28");
        Calendar calendar=Calendar.getInstance();
        calendar.setTime(date);
        System.out.println("year="+calendar.get(Calendar.YEAR)+"  month="+(calendar.get(Calendar.MONTH)+1)+"  day="+calendar.get(Calendar.DAY_OF_MONTH));
    }catch (Exception e)
    {
        e.printStackTrace();
    }