需求:计算设备使用寿命,还好没有完全相信ChatGPT!

173 阅读3分钟

在日常开发中,我们难免会跟日期打交道,有很多时候我们要对相关的日期进行处理。我们就需要根据需求需要来对日期做对应的处理。

在我的一次开发中,有一个需求是我需要计算一个设备的使用寿命,不满一年按一年算,满一年不满两年按两年算。简简单单几个字的需求,我也是仔细思考了一下怎么写,不过由于有了ChatGPT,我便试着向它提出问题,给我一套代码解决方案,然后结果并没有让我满意,我在验证的过程中发现并不能完美实现,会有边界的问题。我先贴出gpt给的代码:这里我使用的是poe.com 这个需要魔法使用的工具,我感觉挺好用的,只需要魔法和登录账号就行,回答问题速度很快。

import java.time.LocalDate;
import java.time.Period;
/**
* 方法一
*/
public class DateDiff {
    public static int getYearDiff(LocalDate date1, LocalDate date2) {
        Period period = Period.between(date1, date2);
        int yearDiff = period.getYears();
        if (period.getMonths() > 0 || period.getDays() > 0) {
            yearDiff++;
        }
        if (yearDiff == 0) {
            yearDiff = 1;
        } else if (yearDiff == 1) {
            LocalDate nextYear = date1.plusYears(1);
            if (nextYear.isBefore(date2) || nextYear.isEqual(date2)) {
                yearDiff++;
            }
        }
        return yearDiff;
    }
}

//方法一demo示例,由gpt提供
import java.time.LocalDate;

public class DateDiffTest {
    public static void main(String[] args) {
        LocalDate date1 = LocalDate.of(2020, 3, 1);
        LocalDate date2 = LocalDate.of(2021, 2, 28);
        int yearDiff = DateDiff.getYearDiff(date1, date2);
        System.out.println(yearDiff); // 输出2

        LocalDate date3 = LocalDate.of(2020, 3, 1);
        LocalDate date4 = LocalDate.of(2020, 12, 31);
        yearDiff = DateDiff.getYearDiff(date3, date4);
        System.out.println(yearDiff); // 输出1
    }
}

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
/**
* 方法二
*/
public class StringDateDiff {
    public static int getYearDiff(String strDate1, String strDate2) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate date1 = LocalDate.parse(strDate1, formatter);
        LocalDate date2 = LocalDate.parse(strDate2, formatter);
        return DateDiff.getYearDiff(date1, date2);
    }
}

//方法二demo示例,由gpt提供
public class StringDateDiffTest {
    public static void main(String[] args) {
        String strDate1 = "2020-03-01";
        String strDate2 = "2021-02-28";
        int yearDiff = StringDateDiff.getYearDiff(strDate1, strDate2);
        System.out.println(yearDiff); // 输出2

        String strDate3 = "2020-03-01";
        String strDate4 = "2020-12-31";
        yearDiff = StringDateDiff.getYearDiff(strDate3, strDate4);
        System.out.println(yearDiff); // 输出1
    }
}

其实我看到代码的demo示例结果后,我就自己去写了,由于自己的技能比较笨拙,所以大佬勿喷,对我来说能run就行哈哈哈哈。代码如下:

private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
private static final SimpleDateFormat sdf2 = new SimpleDateFormat("MMdd");
private static final SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd");

/**
 * 根据新旧日期字符串计算两者所差年份
 * @param old 旧日期 2022-03-30
 * @param now 最新的日期  2023-03-20
 * @return  不满一年算一年,一年多算两年
 */
private static Long computeYear(String old,String now){
    try {
        Date oldDate = sdf.parse(old);
        Date nowDate = sdf.parse(now);
        long a = Long.parseLong(sdf.format(nowDate))-Long.parseLong(sdf.format(oldDate));
        if (equalsLarge(old,now)){
            a= a+1;
        }
        return a;
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }
}

/**
 * 比较日期大小,用来判断是否需要对年份进行+1
 * 这里是将日期字符串转成int类型来进行比较大小,如0330 和0320 比较
 */
private static Boolean equalsLarge(String old,String now){
    try {
        return Long.parseLong(sdf2.format(sdf3.parse(now))) > Long.parseLong(sdf2.format(sdf3.parse(old)));
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }
}

我这里的新日期和旧日期传值不能出错,当然如果你不知道自己的两个日期哪个比较新的话可以在调用computeYear方法前通过Date.getTime()方法去判断比较一下两个日期的大小值,然后再去根据结果进行传参。 当然可能会有人说我用的gpt不够智能,主要是可能我经济能力有限,没有去购买ChatGPT4.0,主打就是一个白嫖哈哈哈哈~

大佬们有更好的建议欢迎放在评论区~