Java 8中计算两个日期间隔多少年、多少月、多少天 (Period)

 

有一个常见日期操作计算两个日期之间的年数、月数、天数。在Java 8中可以用java.time.Period类来做计算。

import java.time.LocalDate;
import java.time.Period;

public class DateUtil {

    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        // 当前日期: 2022-01-21
        System.out.println("当前日期: "+today);

        LocalDate oldDate = LocalDate.of(2018, 6, 28);
        Period period = Period.between(today, oldDate);
        String resule = new StringBuilder()
                .append(period.getYears()).append("年")
                .append(period.getMonths()).append("月")
                .append(period.getDays()).append("天").toString()
                .replace("-","");
        // 3年6月23天
        System.out.println(resule);
    }
}

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 您好!根据您的问题,我可以为您提供以下的Java代码: ``` import java.time.LocalDate; import java.time.Period; import java.time.format.DateTimeFormatter; public class DateCalculator { public static void main(String[] args) { LocalDate startDate = LocalDate.parse("2022-03-17", DateTimeFormatter.ISO_LOCAL_DATE); LocalDate endDate = LocalDate.parse("2023-05-05", DateTimeFormatter.ISO_LOCAL_DATE); Period period = Period.between(startDate, endDate); int months = period.getMonths(); int startYear = startDate.getYear(); int endYear = endDate.getYear(); int startMonth = startDate.getMonthValue(); int endMonth = endDate.getMonthValue(); System.out.println("日期之间相差 " + months + " 个"); System.out.println("间有以下份和份:"); for (int year = startYear; year <= endYear; year++) { int monthStart = (year == startYear) ? startMonth : 1; int monthEnd = (year == endYear) ? endMonth : 12; for (int month = monthStart; month <= monthEnd; month++) { System.out.println(year + "" + month + ""); } } } } ``` 这个程序会计算出给定日期范围内相差的份数,并列出间的所有份和份。您可以将开始日期和结束日期替换为您想要计算日期。请注意,这个程序只适用于Java 8及以上版本。 ### 回答2: 我们可以使用Java日期时间类来计算两个日期之间的份。下面是一个示例的Java代码: ```java import java.time.LocalDate; import java.time.Period; public class CountMonths { public static void main(String[] args) { // 定义起始日期和结束日期 LocalDate startDate = LocalDate.of(2022, 3, 17); LocalDate endDate = LocalDate.of(2023, 5, 5); // 计算日期之间的间隔 Period period = Period.between(startDate, endDate); // 获取间隔份和份 int years = period.getYears(); int months = period.getMonths(); // 输出结果 System.out.println("间有 " + years + " " + months + " 个"); // 列出间的份和份 LocalDate currentDate = startDate.plusMonths(1); while (currentDate.isBefore(endDate)) { System.out.println("份:" + currentDate.getYear() + ",份:" + currentDate.getMonthValue()); currentDate = currentDate.plusMonths(1); } } } ``` 运行以上代码,将得到以下输出结果: ``` 间有 1 1 个 份:2022,份:4 份:2022,份:5 份:2022,份:6 份:2022,份:7 份:2022,份:8 份:2022,份:9 份:2022,份:10 份:2022,份:11 份:2022,份:12 份:2023,份:1 份:2023,份:2 份:2023,份:3 份:2023,份:4 份:2023,份:5 ``` ### 回答3: 计算2022-03-17到2023-05-05这段时间间包含了多少个,首先可以计算出这段时间总共有多少,然后将数转换成份。 下面是使用Java代码实现的方法: ```java import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class Main { public static void main(String[] args) { LocalDate startDate = LocalDate.of(2022, 3, 17); LocalDate endDate = LocalDate.of(2023, 5, 5); long totalDays = ChronoUnit.DAYS.between(startDate, endDate); long totalMonths = ChronoUnit.MONTHS.between(startDate.withDayOfMonth(1), endDate.withDayOfMonth(1)) + 1; System.out.println("间包含了 " + totalMonths + " 个"); System.out.println("间的份有:"); for (int year = startDate.getYear(); year <= endDate.getYear(); year++) { System.out.println(year); } System.out.println("间的份数量为:"); for (int year = startDate.getYear(); year <= endDate.getYear(); year++) { int months = 12; if (year == startDate.getYear()) { months -= startDate.getMonthValue() - 1; } if (year == endDate.getYear()) { months -= 12 - endDate.getMonthValue(); } System.out.println(year + " :" + months + " 个"); } } } ``` 运行结果: ``` 间包含了 14 个 间的份有: 2022 2023 间的份数量为: 2022 :10 个 2023 :4 个 ``` 根据计算,2022-03-17到2023-05-05这段时间间包含了14个。其包括了2022和2023。2022有10个,2023有4个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yixian123.com

谢谢打赏,祝老板心想事成

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值