|
@@ -18,6 +18,7 @@ import org.springframework.validation.annotation.Validated;
|
|
|
import java.io.*;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.nio.file.Files;
|
|
|
+import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.Month;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
@@ -492,14 +493,52 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
|
|
|
return files != null && files.length > 0 ? files[0] : null;
|
|
|
}
|
|
|
|
|
|
- private static LocalDateTime parseToLocalDateTime(String dateString) {
|
|
|
+// private static LocalDateTime parseToLocalDateTime(String dateString) {
|
|
|
+// if (dateString == null || dateString.isEmpty()) {
|
|
|
+// return LocalDateTime.of(1, Month.JANUARY, 1, 0, 0); // 处理 null 或空字符串的情况
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 预处理日期字符串,确保日期部分符合格式要求
|
|
|
+// dateString = preprocessDateString(dateString);
|
|
|
+//
|
|
|
+// // 允许的日期格式列表
|
|
|
+// List<String> dateFormats = Arrays.asList(
|
|
|
+// "yyyy-MM-dd HH:mm:ss",
|
|
|
+// "yyyy/MM/dd HH:mm:ss",
|
|
|
+// "yyyy-MM-dd",
|
|
|
+// "yyyy/MM/dd", // 支持没有时间部分的日期
|
|
|
+// "yyyy/MM/d", // 支持没有前导零的日期
|
|
|
+// "yyyy-MM-dd'T'HH:mm:ss"
|
|
|
+// );
|
|
|
+//
|
|
|
+// // 尝试每种日期格式
|
|
|
+// for (String format : dateFormats) {
|
|
|
+// try {
|
|
|
+// DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
|
|
|
+// if (format.contains("HH")) {
|
|
|
+// return LocalDateTime.parse(dateString, formatter);
|
|
|
+// } else {
|
|
|
+// // 如果格式不包含时间部分,补充默认时间 "00:00:00"
|
|
|
+// return LocalDateTime.parse(dateString + " 00:00:00", formatter);
|
|
|
+// }
|
|
|
+// } catch (DateTimeParseException e) {
|
|
|
+// System.err.println("解析失败: " + dateString + " 使用格式: " + format);
|
|
|
+// // 如果解析失败,继续尝试下一个格式
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 如果没有任何格式能够解析,则返回一个默认的时间值
|
|
|
+// return LocalDateTime.of(1, Month.JANUARY, 1, 0, 0);
|
|
|
+// }
|
|
|
+
|
|
|
+ public static LocalDateTime parseToLocalDateTime(String dateString) {
|
|
|
if (dateString == null || dateString.isEmpty()) {
|
|
|
- return LocalDateTime.of(1, Month.JANUARY, 1, 0, 0); // 处理 null 或空字符串的情况
|
|
|
+ // 如果输入为空,返回默认的 LocalDateTime(例如 0001-01-01 00:00:00)
|
|
|
+ return LocalDateTime.of(1, 1, 1, 0, 0, 0, 0);
|
|
|
}
|
|
|
|
|
|
// 预处理日期字符串,确保日期部分符合格式要求
|
|
|
dateString = preprocessDateString(dateString);
|
|
|
-
|
|
|
// 允许的日期格式列表
|
|
|
List<String> dateFormats = Arrays.asList(
|
|
|
"yyyy-MM-dd HH:mm:ss",
|
|
@@ -514,23 +553,24 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
|
|
|
for (String format : dateFormats) {
|
|
|
try {
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
|
|
|
+ // 如果包含时间部分,则解析为 LocalDateTime
|
|
|
if (format.contains("HH")) {
|
|
|
return LocalDateTime.parse(dateString, formatter);
|
|
|
} else {
|
|
|
- // 如果格式不包含时间部分,补充默认时间 "00:00:00"
|
|
|
- return LocalDateTime.parse(dateString + " 00:00:00", formatter);
|
|
|
+ // 如果没有时间部分,假设时间为 00:00:00
|
|
|
+ LocalDate date = LocalDate.parse(dateString, formatter);
|
|
|
+ return date.atStartOfDay(); // 默认时间为 00:00:00
|
|
|
}
|
|
|
} catch (DateTimeParseException e) {
|
|
|
- System.err.println("解析失败: " + dateString + " 使用格式: " + format);
|
|
|
// 如果解析失败,继续尝试下一个格式
|
|
|
+ System.err.println("解析失败: " + dateString + " 使用格式: " + format);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 如果没有任何格式能够解析,则返回一个默认的时间值
|
|
|
- return LocalDateTime.of(1, Month.JANUARY, 1, 0, 0);
|
|
|
+ // 如果没有任何格式能够解析,则返回默认的 LocalDateTime
|
|
|
+ return LocalDateTime.of(1, 1, 1, 0, 0, 0, 0); // 返回默认的 LocalDateTime
|
|
|
}
|
|
|
|
|
|
-
|
|
|
// 预处理日期字符串,确保日期部分符合格式要求(补充单数字日期为双位数)
|
|
|
private static String preprocessDateString(String dateString) {
|
|
|
// 如果日期格式是 "yyyy/MM/d"(例如 "2012/5/5"),则补充单数字日期为双位数
|
|
@@ -543,9 +583,6 @@ public class SpecimenInfoServiceImpl implements SpecimenInfoService {
|
|
|
}
|
|
|
return dateString; // 如果不符合该格式则直接返回原字符串
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
//工作台
|
|
|
//根据入库的登记情况统计本年标本入库信息
|
|
|
@Override
|