我有一个用户从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));
...
答案 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();
}