各种日期格式汇总转换:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Locale;
public class DateTimeUtil {
public static String convertToStandard(String input) {
// 定义可能的日期时间格式
String[] patterns = {
"timestamp_millis","yyyy/MM/dd HH:mm:ss.SSS","yyyy-MM-dd HH:mm:ss.SSS",
"yyyyMMddHHmmss","yyyy-MM-dd'T'HH:mm:ss'+0800'","yyyy-MM-dd'T'HH:mm:ss'Z'",
"yyyyMMdd'T'HHmmss"};
// 定义目标格式
DateTimeFormatter targetFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 遍历所有可能的格式
for (String pattern : patterns) {
if (pattern.equals("timestamp_millis")) {
try {
long millis = Long.parseLong(input);
LocalDateTime localDateTime =
LocalDateTime.ofInstant(Instant.ofEpochMilli(millis), ZoneId.of("Asia/Shanghai"));
return localDateTime.format(targetFormat);
} catch (NumberFormatException e) {
continue;
}
} else {
try {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date date = sdf.parse(input);
// 处理时区问题
if (pattern.endsWith("'Z'")) {
ZonedDateTime zonedDateTime =
ZonedDateTime.ofInstant(date.toInstant(), ZoneId.of("UTC"));
LocalDateTime localDateTime =
zonedDateTime.withZoneSameInstant(ZoneId.of("Asia/Shanghai")).toLocalDateTime();
return localDateTime.format(targetFormat);
} else {
LocalDateTime localDateTime =
LocalDateTime.ofInstant(date.toInstant(), ZoneId.of("Asia/Shanghai"));
return localDateTime.format(targetFormat);
}
} catch (ParseException e) {
continue;
}
}
}
// 如果无法解析,返回一个错误信息
return "无法解析的日期时间格式";
}
public static void main(String[] args) {
String[] testInputs = {"1666888220000","2023/08/12 16:30:00.000",
"2023-08-12 16:30:00.000","20230812163020",
"2023-08-12T16:30:00+0800","2023-08-12T09:30:00Z",
"20230812T163000"};
for (String input : testInputs) {
System.err.println(convertToStandard(input));
}
}
}