获取特殊时间

获取特殊时间

前言

最近做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();
    }
}

输出结果

image-20240702151857396

posted @ 2024-07-02 15:19  2月2日  阅读(10)  评论(0)    收藏  举报