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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:24:39