问题描述
我有 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);
我基本上是想在不改变月份和日期的情况下改变年份
可以吗?
解决方法
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 的更多信息。
,试试:
String[] arrOfStr = parts1[1].split("-",2);
arrOfStr[0] 包含年份
现在你需要将它解析为一个int(因为它只有4位数字)
int year = Integer.parseInt(arrOfStr[0]);
year 现在包含数字 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);