如果您的dateStr
参数是以yyyy-MM-dd
格式给出,您可以在将字符串转换为日期之前,先用SimpleDateFormat
将该字符串从yyyy-MM-dd
格式转换为yyyyMMdd
格式,然后再进行后续的日期计算。下面是修改后的代码示例:
Java
1import java.text.ParseException;
2import java.text.SimpleDateFormat;
3import java.util.Calendar;
4import java.util.Date;
5
6public class DateUtils {
7
8 private static final String DATE_FORMAT_YYYYMMDD = "yyyyMMdd";
9 private static final String INPUT_DATE_FORMAT_YYYY_MM_DD = "yyyy-MM-dd";
10
11 /**
12 * 获取指定日期前n天的日期,支持yyyy-MM-dd格式的字符串日期,如果dateStr为空或格式不匹配,则使用当前日期计算。
13 *
14 * @param day 减去的天数
15 * @param dateStr 可选的日期字符串,支持格式为yyyyMMdd或yyyy-MM-dd
16 * @return 计算后的日期字符串,格式为yyyyMMdd,或null(出现异常时)
17 */
18 public static String getDateBeforeDayParam(Integer day, String dateStr) {
19 SimpleDateFormat inputFormat = new SimpleDateFormat(INPUT_DATE_FORMAT_YYYY_MM_DD);
20 SimpleDateFormat outputFormat = new SimpleDateFormat(DATE_FORMAT_YYYYMMDD);
21 StringBuilder builder = new StringBuilder();
22
23 try {
24 Date date;
25 // 尝试将字符串转换为日期,支持两种格式
26 if (dateStr != null && !dateStr.isEmpty()) {
27 // 先尝试yyyy-MM-dd格式转换
28 date = inputFormat.parse(dateStr);
29 } else {
30 // 如果dateStr为空或格式不匹配,默认使用当前日期
31 date = new Date();
32 }
33
34 // 使用Calendar进行日期操作
35 Calendar calendar = Calendar.getInstance();
36 calendar.setTime(date);
37 // 减去指定天数
38 calendar.add(Calendar.DATE, -day);
39
40 // 将处理后的日期转换为yyyyMMdd格式
41 builder.append(outputFormat.format(calendar.getTime()));
42 } catch (ParseException e) {
43 // 日志记录或处理异常,这里简单返回null
44 System.err.println("日期解析异常:" + e.getMessage());
45 return null;
46 }
47 return builder.toString();
48 }
49}
在这个版本中,我添加了对yyyy-MM-dd
格式的支持。首先,使用inputFormat
尝试将传入的dateStr
从yyyy-MM-dd
格式解析为日期对象。如果解析成功,继续进行减去天数的操作;如果dateStr
为空或解析失败,则默认使用当前日期。最终,计算得到的日期会统一以yyyyMMdd
格式输出。