年-月怎么转换成标准格式日期

日期问题,前端日期选择为年-月形式,如2023-03,放在NutMap中,
数据库字段为Date类型
如果我把数据直接存入数据库,会报数据类型的错误
但是这个年-月怎么才能转成标准的年-月-日形式呢?

我试着先用NutMap.gettime(str),得到CST时间,然后再转回来,类似如下代码


 public static void formatDate() {

        String str = "";
        str = "2022-11";
        NutMap map = new NutMap();
        map.put("ss",str);
        String formatStr = "";


        try {
            SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
            Date dd = map.getTime("ss");
            Date date = (Date) sdf.parse(map.getTime("ss").toString());
            formatStr = new SimpleDateFormat("yyyy-MM-dd").format(date);
            System.out.println("date = " + date);
            System.out.println("formatStr = " + formatStr);
        }
        catch (Exception es) {
            es.printStackTrace();
        }
        System.out.println(formatStr);
    }

但是问题是这样一转换,日期就错了,2022-11取出来就成了2022-01-01,请问有什么好办法吗

参考GPT和自己的思路:您好,根据您的问题描述,您想将年-月格式的日期转换成标准的年-月-日格式,但是您尝试使用 NutMap.gettime(str) 转换后结果不正确,变成了 2022-01-01。这是因为在转换的过程中使用了错误的日期格式。您可以尝试修改代码如下:

public static void formatDate() {
    String str = "2022-11";
    NutMap map = new NutMap();
    map.put("ss", str);
    String formatStr = "";

    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(map.getString("ss") + "-01");
        formatStr = sdf.format(date);
        System.out.println("date = " + date);
        System.out.println("formatStr = " + formatStr);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    System.out.println(formatStr);
}

首先,您要使用 yyyy-MM-dd 的日期格式来进行转换。其次,在将年-月格式的日期转换成标准的年-月-日格式时,可以将其补充为该月的第一天,即在日期末尾添加 "-01",然后再进行转换。这样即可确保转换后日期为该月的第一天。代码中使用了 try-catch 块来处理可能会出现的 ParseException 异常,同时输出转换后的 date 和 formatStr。

这个没办法,数据库里date得是年月日都有的,你现在只有年月,要么你把年和月分开,两个字段都是int,要么你用字符串存
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");是年,月,但是默认就会补一个日进去。

直接转成date 入库就行

new SimpleDateFormat("yyyy-MM")