如何在方法中正确使用 LocalTime?

时间:2021-02-15 16:23:07

标签: java interface boolean localtime

我必须创建一个 CarFactory 类,它根据季节绘制一辆车(我认为我是对的),并从晚上 20 点到早上 6 点打开给定汽车的灯。 请忽略@Beans,它仅用于测试目的。我的问题是 hasHeadlightsTurnedOn() 的实现应该是什么样的?我对如何执行晚上 20 点到早上 6 点开灯的规则有点迷茫。

界面:

public interface Car {
    boolean hasHeadlightsTurnedOn();
    String getCarType();
}

然后是 3 种类型的汽车,以其中一种为例:

public class Sedan implements Car {
    @Override
    public String getCarType(){
        return "Sedan";
    }
    @Override
    public boolean hasHeadlightsTurnedOn() {
        return true ;
    }

}

类 CarFactory:

@Configuration
public class CarFactory {

    @Bean
    public Car randomCar(){
        Car car;
        String[] strArr= {"Spring", "Autumn", "Summer","Winter"};
        Random generator = new Random();
        int chosen = generator.nextInt(strArr.length);
        if (chosen == 3) {
                car = new SUV();
            } else if (chosen == 2) {
                car = new Cabrio();
            } else {
                car = new Sedan();
            }
            return car;
    }
}

4 个答案:

答案 0 :(得分:2)

这将是您的 hasHeadlightsTurnedOn 函数。

boolean hasHeadlightsTurnedOn(){
    int hour = LocalTime.now().getHour();
    return hour>=20 || hour<6;
}

对于季节部分,您可以使用月份和日期来确定它是哪个季节,而不是随机生成的数字。

答案 1 :(得分:2)

@Override
public boolean hasHeadlightsTurnedOn() {
    LocalTime lt = LocalTime.now();

    // long way
    /*int hour = lt.getHour();
    if (hour < 6 || hour >= 20) {
        return true;
    } else {
        return false;
    }*/

    // short way
    return lt.getHour() < 6 || lt.getHour() >= 20;
}

此外,我建议在接口中使用抽象类或默认方法。这样,您就不必为每个类创建相同的方法。

抽象类:

import java.time.LocalTime;

public abstract class AbstractCar implements Car {

    @Override
    public boolean hasHeadlightsTurnedOn() {
        LocalTime lt = LocalTime.now();
        return lt.getHour() < 6 || lt.getHour() >= 20;
    }
}

然后是汽车类:

public class Sedan extends AbstractCar {
    @Override
    public String getCarType(){
        return "Sedan";
    }
}

默认方法:

import java.time.LocalTime;

public interface Car {
    default boolean hasHeadlightsTurnedOn() {
        LocalTime lt = LocalTime.now();
        return lt.getHour() < 6 || lt.getHour() >= 20;
    }
    String getCarType();
}

和你的汽车类,只是没有 hasHeadlightsTurnedOn 函数

答案 2 :(得分:1)

为每种汽车类型定义一个私有的布尔变量。检查当前时间,如果它落在假设灯亮的时间范围内,则将其设置为 true。像这样的事情

日期 date = new Date();

SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm") ;
dateFormat.format(date);
System.out.println(dateFormat.format(date));

if(dateFormat.parse(dateFormat.format(date)).after(dateFormat.parse("12:07")))
{
    System.out.println("Current time is greater than 12.07");
}else{`enter code here`
    System.out.println("Current time is less than 12.07");
}

答案 3 :(得分:0)

LocalDateTime 有一个 getHour() 方法,您可以像这样使用:

LocalDateTime time = LocalDateTime.now();
if (time.getHour() < 6 || time.getHour() >= 20) {
    // headlights on
} else {
    // headlights off
}
相关问题