首页 > 解决方案 > 如何使用时钟类从 Java 中的当前日期减去 2 个月

问题描述

我正在编写代码,我需要使用 Clock 类来获取当前时间。我想用 2 个月减去当前日期。

这是代码:

public class DemoApp {
    private Clock clock = Clock.systemDefaultZone();

    public List<String> subtractMonths(String[][] str) {
        List<String> ids = new ArrayList<>();
        // The code
        return ids;
    }
}

在主类中,我有这个字符串数组:

private static final String[][] str = {
    {"id1", "2017-11-01T14:10:30"},
    {"id2", "2018-01-20T18:01:34"},
    {"id3", "2018-01-22T08:45:22"},
    {"id4", "2018-02-18T12:42:37"},
    {"id5", "2019-03-16T03:56:32"},
};

在主类中,我将subtractMonths使用 str 参数调用该方法,如果日期不是当前月份和上个月,则返回 id。例如,如果当前月份是 1 月,则仅返回 12 月之前的月份的 id。任何反馈将不胜感激!

标签: javadate

解决方案


使用LocalDateTimeorInstant你有方法minus()plus()减去或增加时间量:

LocalDateTime beforeTwoMonths = LocalDateTime.now()
        .minus(2, ChronoUnit.MONTHS);

或者使用以下minusMonths()方法:

LocalDateTime beforeTwoMonths = LocalDateTime.now().minusMonths(2);

仅使用Clock类是不可能的。唯一的方法是将其转换为ZonedDateTime并减去月份:

ZonedDateTime beforeTwoMonths = Clock.systemDefaultZone().instant().atZone(ZoneId.systemDefault()).minusMonths(2);

否则你可以自己计算,但我认为这不是最好的方法。


推荐阅读