在我的练习中,我必须计算变量Instant inHour和Instant outHour之间的差异(长持续时间(。
换句话说,我必须计算一个人在停车场停留的时间来计算价格。
这是我第一次使用Instant类,所以我有点迷路了:(
这是我的课:
public class FareCalculatorService {
public void calculateFare(Ticket ticket){
if( (ticket.getOutTime() == null) || (ticket.getOutTime().isBefore(ticket.getInTime())) ){
throw new IllegalArgumentException("Out time provided is incorrect:"+ticket.getOutTime().toString());
}
Instant inHour = ticket.getInTime();
Instant outHour = ticket.getOutTime();
//TODO: Some tests are failing here. Need to check if this logic is correct
long duration = outHour - inHour;
switch (ticket.getParkingSpot().getParkingType()){
case CAR: {
ticket.setPrice(duration * Fare.CAR_RATE_PER_HOUR);
break;
}
case BIKE: {
ticket.setPrice(duration * Fare.BIKE_RATE_PER_HOUR);
break;
}
default: throw new IllegalArgumentException("Unkown Parking Type");
}
}
谢谢你的帮助。
您可以在Instant
类中使用方法public long until(Temporal endExclusive, TemporalUnit unit)
。
";以指定的单位计算到另一个瞬间为止的时间">
文档:
https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html#until-java.time.temporal.java.time.temporal.TemporalUnit-
第二个参数(TemporalUnit
单元(的定义可以在实现接口TemporalUnit
的类ChronoUnit
中找到。
文档:
https://docs.oracle.com/javase/8/docs/api/java/time/temporal/ChronoUnit.html
所以你需要计算类似的时间差:
System.out.println(inHour.until(outHour, ChronoUnit.MINUTES));
只要稍微阅读一下这两个类的文档,在代码中实现它应该很容易。
这已经为您编写了。请参阅课程持续时间。它的方法between()
可以使用两个Temporal实例(例如Instant(,并且您有它们之间的持续时间。之后,您可以获得以秒、小时或任何其他时间单位为单位的持续时间。参见方法get()
或getSeconds()