如何将DatePicker获取的年月日整数转为SimpleDateFormat指定的yyyy-MM-dd格式日期
问题
我编写了一个从DatePicker中获取年、月、日并分别存储为整数的方法,代码如下:
public void onDateChanged(DatePicker datePicker, int year, int month, int dayOfMonth) { yearD = year; monthD = (month + 1); dayD = dayOfMonth; }
我已实例化SimpleDateFormat:SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); 请问如何将上述获取的年月日整数转换为该类指定的"yyyy-MM-dd"格式日期?
解决方案
嘿,这事儿其实挺简单的,我给你两种实用方案,你可以根据自己的Java版本来选:
方案一:用旧版Calendar API(兼容所有Java版本)
因为SimpleDateFormat只能格式化Date对象,所以得先把你的整数年月日转成Date。这里可以借助Calendar类来实现:
// 1. 创建Calendar实例 Calendar calendar = Calendar.getInstance(); // 2. 设置年月日:注意Calendar的月份是0开头的,你的monthD已经加过1,所以要减回去 calendar.set(yearD, monthD - 1, dayD); // 3. 转换成Date对象 Date date = calendar.getTime(); // 4. 用你已有的formatter完成格式化 String formattedDate = formatter.format(date);
为啥要给monthD减1?因为Calendar里的月份是从0开始计数的(0对应1月,11对应12月),而你在onDateChanged里把month加1变成了正常的1-12月份,所以设置时得对应回去,不然月份会多算一个月哦。
方案二:用Java 8+的java.time新API(强烈推荐)
如果你的项目用的是Java 8及以上版本,真心建议用java.time包下的类,它们线程安全、API逻辑更清晰,比旧的Date和SimpleDateFormat靠谱多了:
// 1. 用LocalDate直接构造日期(不用处理月份偏移,直接用你存的yearD、monthD、dayD) LocalDate localDate = LocalDate.of(yearD, monthD, dayD); // 2. 用DateTimeFormatter代替SimpleDateFormat(同样线程安全) DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 3. 完成格式化 String formattedDate = localDate.format(formatter);
这种方法完全不用考虑月份偏移的问题,因为LocalDate.of()的参数就是正常的1-12月份,和你存储的monthD完全匹配,代码简洁还不容易出错。
内容的提问来源于stack exchange,提问作者Daniel Andersson
相关产品推荐
相关产品推荐

