获取特殊时间
前言
最近做nl2sql遇到一个问题,当用户问题涉及日周月季年时,模型对于特殊时间的识别不太好,所以需要将一些特殊时间告诉模型,以下是一个Java工具类
工具类
package com.cmft.langchain4j.tools;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.WeekFields;
import java.util.Locale;
public class DataFormatUtil {
/**
* 处理特殊时间
*
* @return 结果
*/
public static String getAllTimeRanges() {
// 获取当前时间并格式化为字符串
LocalDate now = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
String currentDateString = now.format(formatter);
LocalDate currentDate = LocalDate.parse(currentDateString, DateTimeFormatter.BASIC_ISO_DATE);
LocalDate startDate;
String[] timeRanges = new String[8];
// 最近7天
startDate = currentDate.minusDays(6);
timeRanges[0] = String.format("最近7天:%d年%d月%d日-%d年%d月%d日",
startDate.getYear(), startDate.getMonthValue(), startDate.getDayOfMonth(),
currentDate.getYear(), currentDate.getMonthValue(), currentDate.getDayOfMonth());
// 过去一周、最近一周
startDate = currentDate.with(WeekFields.of(Locale.getDefault()).dayOfWeek(), 1).minusWeeks(1);
LocalDate endDate = startDate.plusDays(6);
timeRanges[1] = String.format("过去一周、最近一周:%d年%d月%d日-%d年%d月%d日",
startDate.getYear(), startDate.getMonthValue(), startDate.getDayOfMonth(),
endDate.getYear(), endDate.getMonthValue(), endDate.getDayOfMonth());
// 过去三个月
startDate = currentDate.minusMonths(3);
timeRanges[2] = String.format("过去三个月:%d年%d月-%d年%d月",
startDate.getYear(), startDate.getMonthValue(),
currentDate.getYear(), currentDate.getMonthValue());
// 近半年、过去半年
startDate = currentDate.minusMonths(6);
timeRanges[3] = String.format("近半年、过去半年:%d年%d月-%d年%d月",
startDate.getYear(), startDate.getMonthValue(),
currentDate.getYear(), currentDate.getMonthValue());
// 去年
startDate = currentDate.minusYears(1).withMonth(1).withDayOfMonth(1);
endDate = startDate.plusYears(1).minusDays(1);
timeRanges[4] = String.format("去年:%d年1月-%d年12月",
startDate.getYear(), startDate.getYear());
// 过去3年
startDate = currentDate.minusYears(3);
timeRanges[5] = String.format("过去3年:%d年1月-%d年12月",
startDate.getYear(), currentDate.getYear());
// 累计,这里假设项目开始日期为2020年1月1日
startDate = LocalDate.of(2020, 1, 1);
timeRanges[6] = String.format("累计:%d年1月1日-%d年%d月%d日",
startDate.getYear(), currentDate.getYear(), currentDate.getMonthValue(), currentDate.getDayOfMonth());
// 为了简化,这里我们忽略"近XX月"、"近XX年"的情况,因为它们与"过去XX月"、"过去XX年"的处理相同
StringBuilder result = new StringBuilder();
for (int i = 0; i < timeRanges.length - 1; i++) {
result.append(i + 1).append(". ").append(timeRanges[i]).append("\n");
}
return result.toString();
}
}