You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:20:38