gpt4 book ai didi

Java 8 不带时间成分的日差

转载 作者:行者123 更新时间:2023-12-01 19:46:23 25 4
gpt4 key购买 nike

我的实用程序方法接受 Java 7 日期(我无法控制它,因为它是外部的),但需要计算日差。我使用 Java 8 ChronoUnit 方法来精确地避免闰年、夏令时等所有问题。

public static long daysBetweenDatesWithSign(Date d1, Date d2) {
Instant instant1 = d1.toInstant();
Instant instant2 = d2.toInstant();
long diff = ChronoUnit.DAYS.between(instant1, instant2);
return diff;
}

结果不是我想要的,因为它需要考虑时间,例如

( [2018年11月5日 11:00am] , [2019年3月5日 10:00am] ) 给出 -119 而不是 -120 .

( [2018年11月5日 11:00am] , [2019年3月5日 3:00pm] ) 给出 -120

我需要这两个来给出-120,因为我的函数应该是日/无时间比较。

但我不想回到 Java 7 日历,因为闰年​​等问题。准确地说,我需要新的 Java 8 方法,但我可以做到吗比较 Java 8 中的 Days/no-Time?

最佳答案

首先,该方法针对给定日期值返回的值分别为 113114,而不是 -119 >-120

假设您希望根据当前(默认)时区获得日期差异,则可以通过调用 Instant 然后调用 LocalDateatZone 值转换为 toLocalDate

public static long daysBetweenDatesWithSign(Date d1, Date d2) {
return daysBetweenDatesWithSign(d1, d2, ZoneId.systemDefault());
}
public static long daysBetweenDatesWithSign(Date d1, Date d2, ZoneId zone) {
LocalDate instant1 = d1.toInstant().atZone(zone).toLocalDate();
LocalDate instant2 = d2.toInstant().atZone(zone).toLocalDate();
return ChronoUnit.DAYS.between(instant1, instant2);
}

测试

public static void main(String[] args) throws ParseException {
test("Nov.11,2018 11:00am", "Mar.5,2019 10:00am");
test("Nov.11,2018 11:00am", "Mar.5,2019 3:00pm");
}
public static void test(String d1, String d2) throws ParseException {
SimpleDateFormat fmt = new SimpleDateFormat("MMM.d,yyyy hh:mma");
System.out.println("[" + d1 + "] , [" + d2 + "] = " +
daysBetweenDatesWithSign(fmt.parse(d1), fmt.parse(d2)));
}

输出

[Nov.11,2018 11:00am] , [Mar.5,2019 10:00am] = 114
[Nov.11,2018 11:00am] , [Mar.5,2019 3:00pm] = 114

关于Java 8 不带时间成分的日差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53159149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com