获取特殊时间

获取特殊时间

前言

最近做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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值