计算java中两个日期的最后三分之一

pw9qyyiw  于 2021-06-29  发布在  Java
关注(0)|答案(3)|浏览(326)

我正在寻找一种方法来获得两个日期的最后三分之一。
第一个例子:
日期1=22:00
日期2=01:00(次日)
calculatelastthird()(输出:00:00)
第二个例子:
日期1=22:25
日期2=01:45(次日)
calculatelastthird()(输出:00:38)
我已经知道如何在这两个日期之间找到中点:

Date midpoint = new Date((date1.getTime() + date2.getTime()) / 2);
ndasle7k

ndasle7k1#

java.time文件

我建议您在日期和时间工作中使用java.time,即现代的java日期和时间api。

ZoneId zone = ZoneId.of("America/Boise");
    ZonedDateTime zdt1 = ZonedDateTime.of(2020, 12, 26, 22, 0, 0, 0, zone);
    ZonedDateTime zdt2 = ZonedDateTime.of(2020, 12, 27, 1, 0, 0, 0, zone);

    Duration fullElapsedTime = Duration.between(zdt1, zdt2);
    Duration twoThirds = fullElapsedTime.multipliedBy(2).dividedBy(3);
    ZonedDateTime lastThird = zdt1.plus(twoThirds);

    System.out.println(lastThird);

此代码段的输出是:
2020-12-27t00:00-07:00[美国/博伊西]
我喜欢这段代码的三点是:
它很好地模仿了一个人手工计算的方式,以及你如何向别人解释你到底想要哪种计算。
它考虑了任何往返夏令时(dst)的转换。
它将实际计算留给库方法。它不涉及您自己的代码中的低级加法或除法。

链接

oracle教程:date time解释如何使用java.time。

hkmswyz6

hkmswyz62#

如果你坚持使用 Date .
它应该是一个简单的数学:
首先,需要计算两个日期之间的差异(以毫秒为单位)。
然后得到该值的2/3,并将其添加到第一个日期。

private static Date calculateLastThird(Date d1, Date d2) { 
        // Calculate time difference in milliseconds 
        long differenceMillis = d2.getTime() - d1.getTime();
        double millisToAdd = (2.0/3.0) * differenceMillis;

        Date twoThird = new Date(d1.getTime() + (long) millisToAdd);

        return twoThird;
    }

    public static void main(String args[]) {
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        try {
            Date date1= sdf1.parse("2020/12/26 22:00:00");
            Date date2= sdf1.parse("2020/12/27 01:00:00");
            SimpleDateFormat sdf2 = new SimpleDateFormat("HH:mm");
            System.out.println("Last third: " + sdf2.format(calculateLastThird(date1, date2)));

            Date date3= sdf1.parse("2020/12/26 22:25:00");
            Date date4= sdf1.parse("2020/12/27 01:45:00");
            System.out.println("Last third: " + sdf2.format(calculateLastThird(date3, date4)));

        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
    }

上述代码的输出示例:

Last third: 00:00
Last third: 00:38
ruarlubt

ruarlubt3#

一种方法是:

Date midpoint = new Date((date1.getTime() + 2 * date2.getTime()) / 3);

相关问题