【问题标题】:Calculate the difference between 2 variables of type Instant计算 Instant 类型的 2 个变量之间的差异
【发布时间】:2022-11-04 03:19:59
【问题描述】:

对于我的练习,我必须计算差异(持续时间长) 变量之间即时inHour即时外出.

换句话说,我必须计算一个人在停车场停留的时间才能计算价格。

这是我第一次使用 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");
    }
}

感谢您的帮助。

【问题讨论】:

    标签: java java.time.instant


    【解决方案1】:

    您可以在Instant 类中使用方法public long until(Temporal endExclusive, TemporalUnit unit)

    “以指定的单位计算直到另一个瞬间的时间量。”

    文档:
    https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html#until-java.time.temporal.Temporal-java.time.temporal.TemporalUnit-

    第二个参数(TemporalUnit 单元)的定义可以在类ChronoUnit 中找到,它实现了接口TemporalUnit

    文档:
    https://docs.oracle.com/javase/8/docs/api/java/time/temporal/ChronoUnit.html

    所以你需要计算类似的时间差:

    System.out.println(inHour.until(outHour, ChronoUnit.MINUTES)); 
    

    只需阅读一下这两个类的文档,在您的代码中实现它应该是一件容易的事。

    【讨论】:

      【解决方案2】:

      这已经为你写好了。见课程Duration。它有方法between() 可以采用两个时间实例(例如即时),并且您在它们之间有持续时间。之后,您可以获得以秒或小时或任何其他时间单位为单位的持续时间。见方法get()getSeconds()

      【讨论】:

        猜你喜欢
        • 2021-04-13
        • 2014-07-21
        • 1970-01-01
        • 2015-03-14
        • 2012-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-18
        相关资源
        最近更新 更多