【问题标题】:how can I change only year in date String?如何仅更改日期字符串中的年份?
【发布时间】:2021-01-02 08:37:14
【问题描述】:

我有 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 且不完整。请编辑您的问题以包括(确切)所需的输入和输出是什么。目前尚不清楚您是要更改字符串数组的一部分还是完整字符串的一部分。
  • 如果你将String解析成LocalDate,然后对它进行必要的操作会更容易。如果必须,之后您可以将LocalDate 转换回String
  • 提示:如果您对表示日期时间值的文本使用ISO 8601 格式,您的工作会更轻松。您已接近合规性,但需要始终在一位数的月份和日期数字上包含填充零。所以,2020-01-02。序列化为文本文件或在系统之间交换数据时仅使用 ISO 8601。仅将其他格式用于用户界面。

标签: java datetime datetime-format datetime-parsing


【解决方案1】:

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 的更多信息。

【讨论】:

    【解决方案2】:

    尝试:

    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);
    

    【讨论】:

    • 最后日期=年+"-"+arrOfStr[1]+"-"+arrOfStr[2];是的,我将使用拆分功能。
    • @SanthoshStark arrOfStr[2] 不存在,记住 0 是我们数组中的第 1 部分,而 1 是我们数组中的第 2 部分。
    • 是的,但我需要年、月、日
    • @SanthoshStark arrOfStr 包含所有这些,在您的帖子中您想更改年份,还是我弄错了?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2013-03-01
    • 2012-01-26
    • 2020-04-23
    相关资源
    最近更新 更多