如何修正EditText(InputType: Date)日期值转整数的代码问题?
修正日期字符串转整数的代码问题
嘿,你的代码里有几个关键问题需要调整,我来一步步给你拆解:
核心问题分析
- 搞反了
format和parse的用途:SimpleDateFormat.format()是用来把Date对象转换成指定格式的字符串,而你现在需要把输入的日期字符串先转换成Date对象,这应该用parse()方法才行。 - 日期格式不匹配:你的EditText输入是
dd.MM.yyyy格式(比如10.01.2017),但你初始化SimpleDateFormat时用的是yyyyMMdd,这会导致解析失败,因为格式完全不对应。 - Integer范围限制:
Integer的最大值是2147483647,对应日期是20380119,如果你的日期超过这个范围,转成Integer会直接抛出NumberFormatException,更稳妥的是用Long类型。
修正后的代码示例
try { // 第一步:定义输入日期的格式(完全匹配EditText的输入格式 dd.MM.yyyy) DateFormat inputFormat = new SimpleDateFormat("dd.MM.yyyy"); // 把输入的字符串解析成Date对象 Date date = inputFormat.parse(etDate.getText().toString()); // 第二步:定义目标输出格式 yyyyMMdd DateFormat outputFormat = new SimpleDateFormat("yyyyMMdd"); // 将Date对象格式化成我们需要的字符串格式 String dateStr = outputFormat.format(date); // 第三步:转成数值类型,优先用Long避免范围溢出 long inputDate = Long.valueOf(dateStr); // 如果确定业务日期不会超过2038年,也可以用Integer: // int inputDate = Integer.valueOf(dateStr); } catch (ParseException e) { // 处理用户输入日期格式错误的情况,比如给用户弹提示 e.printStackTrace(); } catch (NumberFormatException e) { // 处理数值超出范围的异常 e.printStackTrace(); }
额外优化提示
如果你的项目是Android API 26及以上,建议使用java.time包下的新日期API,它比SimpleDateFormat更安全、线程安全:
try { DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); LocalDate localDate = LocalDate.parse(etDate.getText().toString(), inputFormatter); DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyyMMdd"); String dateStr = localDate.format(outputFormatter); long inputDate = Long.parseLong(dateStr); } catch (DateTimeParseException e) { // 处理日期解析异常 e.printStackTrace(); }
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

