在做生日转换的时候,报错了。不知道是什么原因。正常输入 的值啊。。
因为birth的时间格式(20210906)和simpledateformat中的格式(yyyy-MM-dd)不一致,可以改成yyyyMMdd。
因为你时间格式不对啊
20210906
yyyyMMdd
输入 2021-09-06
生日时间格式和你的format不匹配
package cn.hutool.core.date;
用simpledateformat转时间格式,simpledateformat参数必须对应时间格式
格式不一样
记住这个原则,能省很多事。
任何开发语音,要存储时间、传输时间,都用整数时间戳,不要用字符串或自定义什么格式。
时间只有在展现时,才展现成具体年月日时分秒。
写个通用点的函数就好了,原理就是通过正则判断一下字符串是哪种格式,然后再尝试转换。如果对你有用,点一下采纳哦
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DateUtils {
public static final String DATE_BASE_REGEX = "\\d{4}-\\d{1,2}-\\d{1,2}";
public static final String SEPARATOR_REGEX = "(T?|\\s*)";
public static final String DATE_REGEX = "^\\s*" + DATE_BASE_REGEX + "\\s*$";
public static final String DATE_H_REGEX = "^\\s*" + DATE_BASE_REGEX + SEPARATOR_REGEX + "\\d\\d\\s*$";
public static final String DATE_HM_REGEX = "^\\s*" + DATE_BASE_REGEX + SEPARATOR_REGEX + "\\d{1,2}:\\dd{1,2}\\s*$";
public static final String DATE_HMS_REGEX = "^\\s*" + DATE_BASE_REGEX + SEPARATOR_REGEX + "\\d{1,2}:\\d{1,2}:\\d{1,2}\\s*$";
public static final String DATE_HMS_M_REGEX = "^\\s*" + DATE_BASE_REGEX + SEPARATOR_REGEX + "\\d{1,2}:\\d{1,2}:\\d{1,2}\\.\\d{1,3}\\s*$";
private enum DATE_FORMAT_ENUM {
DATE(Pattern.compile(DATE_REGEX), "yyyy-M-d"),
DATE_H(Pattern.compile(DATE_H_REGEX), "yyyy-M-d H"),
DATE_HM(Pattern.compile(DATE_HM_REGEX), "yyyy-M-d H:m"),
DATE_HMS(Pattern.compile(DATE_HMS_REGEX), "yyyy-M-d H:m:s"),
DATE_HMS_M(Pattern.compile(DATE_HMS_M_REGEX), "yyyy-M-d H:m:s.SSS");
private Pattern pattern;
private String format;
DATE_FORMAT_ENUM(Pattern pattern, String format) {
this.pattern = pattern;
this.format = format;
}
static Date formatDate(String timeString) throws Exception {
timeString = prepare(timeString);
for (DATE_FORMAT_ENUM formatEnum : values()) {
Matcher matcher = formatEnum.pattern.matcher(timeString);
if (matcher.find()) {
SimpleDateFormat sdf = new SimpleDateFormat(formatEnum.format);
return sdf.parse(timeString);
}
}
throw new Exception("Unparseable date: " + timeString);
}
private static String prepare(String timeString) {
String s = null;
if (!StringUtils.isEmpty(timeString)) {
if (timeString.contains("-")) {
s = timeString;
} else if (timeString.contains("/")) {
s = timeString.replaceAll("[/]", "-");
} else {
s = timeString.substring(0, 4) + "-" + timeString.substring(4, 6) + "-" + timeString.substring(6);
}
int dotStart = s.indexOf(".") + 1;
boolean hasDot = dotStart > 0;
int msLength = dotStart + 3;
int overMsLength = s.length() - msLength;
int lessMsLength = msLength - s.length();
if (hasDot && overMsLength >= 0) {
return s.substring(0, s.length() - overMsLength);
} else if (hasDot && lessMsLength >= 0) {
for (int i = 0; i < lessMsLength; i++) {
s += "0";
}
return s;
}
if (hasDot) {
s += ".000";
}
}
return s;
}
}
public static Date toDate(String timeString) throws Exception {
if (StringUtils.isEmpty(timeString)) {
return null;
}
return DATE_FORMAT_ENUM.formatDate(timeString);
}
}