我正在寻找一种方法来获得两个日期的最后三分之一。第一个例子:日期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);
ndasle7k1#
我建议您在日期和时间工作中使用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。
hkmswyz62#
如果你坚持使用 Date .它应该是一个简单的数学:首先,需要计算两个日期之间的差异(以毫秒为单位)。然后得到该值的2/3,并将其添加到第一个日期。
Date
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
ruarlubt3#
一种方法是:
Date midpoint = new Date((date1.getTime() + 2 * date2.getTime()) / 3);
3条答案
按热度按时间ndasle7k1#
java.time文件
我建议您在日期和时间工作中使用java.time,即现代的java日期和时间api。
此代码段的输出是:
2020-12-27t00:00-07:00[美国/博伊西]
我喜欢这段代码的三点是:
它很好地模仿了一个人手工计算的方式,以及你如何向别人解释你到底想要哪种计算。
它考虑了任何往返夏令时(dst)的转换。
它将实际计算留给库方法。它不涉及您自己的代码中的低级加法或除法。
链接
oracle教程:date time解释如何使用java.time。
hkmswyz62#
如果你坚持使用
Date
.它应该是一个简单的数学:
首先,需要计算两个日期之间的差异(以毫秒为单位)。
然后得到该值的2/3,并将其添加到第一个日期。
上述代码的输出示例:
ruarlubt3#
一种方法是: