如何仅更改日期字符串中的年份?

how can I change only year in date String?

我有 java 日期字符串。

如何在不更改月份和日期的情况下更改年份。

例如

parts1[1]=   2020-1-2;
parts1[2]=   13:48:21;
CreatedDate = parts1[1]+" "+parts1[2];   
System.out.println(CreatedDate);

我想改成

parts1[1]=   2021-1-2;
parts1[2]=   13:48:21;
CreatedDate = parts1[1]+" "+parts1[2];   
System.out.println(CreatedDate);

我基本上是想改年不改月日

能做到吗?

尝试:

String[] arrOfStr = parts1[1].split("-", 2); 

arrOfStr[0] 包含年份

现在您需要将其解析为 int(因为它只有 4 位数字)

int year = Integer.parseInt(arrOfStr[0]);  

年份现在包含数字 2020。

你可以做到

year++;

将其值增加 1

并以字符串格式放回原处:

arrOfStr[0] = "" + year;

arrOfStr[0] = String.valueOf(year);

把它们放在一起做这个

parts1[1]= arrOfStr[0] + "-" arrOfStr[1]; //  2021-1-2

最后应该是这样的:

parts1[1]=   2020-1-2;
parts1[2]=   13:48:21;

String[] arrOfStr = parts1[1].split("-", 2); 
int year = Integer.parseInt(arrOfStr[0]);  
year++;
arrOfStr[0] = "" + year;
parts1[1]= arrOfStr[0] + "-" + arrOfStr[1];


CreatedDate = parts1[1]+" "+parts1[2];   
System.out.println(CreatedDate);

java.time

您不必拆分字符串然后组合各个部分。您可以将整个字符串解析为 LocalDateTime,然后使用 LocalDateTime#withYear 获取具有指定年份的新实例。

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        String creationDateTime = "2020-1-2 13:48:21";
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-M-d H:m:s", Locale.ENGLISH);
        LocalDateTime ldt = LocalDateTime.parse(creationDateTime, dtf);
        System.out.println(ldt);
        ldt = ldt.withYear(2021);

        // Default format
        String updatedDateTime = ldt.toString();
        System.out.println(updatedDateTime);

        // Custom format
        updatedDateTime = ldt.format(dtf);
        System.out.println(updatedDateTime);
    }
}

输出:

2020-01-02T13:48:21
2021-01-02T13:48:21
2021-1-2 13:48:21

Trail: Date Time.

了解有关 java.time API 的更多信息