如何将CalendarView选中日期格式化为dd/mm/yyyy存入SQLite
解决CalendarView日期格式匹配SQLite存储格式的问题
你当前直接拼接数字的方式会导致单个数字的日/月缺少前导零,比如2号变成"2"而非"02",这就是查询数据时匹配失败的核心原因。下面提供两种可靠的解决方法:
方法1:使用String.format()快速格式化
通过格式化字符串自动为日、月补上前导零,代码修改如下:
public void onSelectedDayChange(@NonNull CalendarView calendarview, int year, int month, int dayOfMonth) { exercise_name = new ArrayList<>(); set_weight = new ArrayList<>(); set_reps = new ArrayList<>(); set_date= new ArrayList<>(); // 按dd/mm/yyyy格式拼接,%02d确保数字不足两位时补0 date = String.format("%02d/%02d/%04d", dayOfMonth, month + 1, year); tviewdate.setText(date); storeDataDateinArrays(); }
说明:%02d会将单个数字的日/月自动补零,比如dayOfMonth=2会转为"02",month+1=1会转为"01";%04d保证年份始终是四位数字。
方法2:使用DateTimeFormatter(Android 8.0+推荐)
如果你的应用适配Android 8.0及以上版本,推荐使用java.time包下的API,线程安全且更规范:
public void onSelectedDayChange(@NonNull CalendarView calendarview, int year, int month, int dayOfMonth) { exercise_name = new ArrayList<>(); set_weight = new ArrayList<>(); set_reps = new ArrayList<>(); set_date= new ArrayList<>(); // 构造LocalDate对象 LocalDate selectedDate = LocalDate.of(year, month + 1, dayOfMonth); // 定义dd/mm/yyyy格式的格式化器 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); // 生成符合要求的日期字符串 date = selectedDate.format(formatter); tviewdate.setText(date); storeDataDateinArrays(); }
说明:若需兼容Android 7.0及以下,需引入ThreeTenABP库来使用java.time相关工具类。
另外建议你把方法参数名改为有意义的命名(比如把i改为year、i1改为month、i2改为dayOfMonth),能大幅提升代码可读性,减少后续出错概率。
内容的提问来源于stack exchange,提问作者John Johnson
相关产品推荐
相关产品推荐

