如何获取时间范围

ni65a41a  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(273)

我正在尝试获取从8:00 am到8:00 pm和8:00 pm到8:00 am的时间范围,我正在尝试获取在firebase的recyclerview中显示它的时间表。
这是我构建的代码。

Calendar c = Calendar.getInstance();
    hour = c.get(Calendar.HOUR_OF_DAY);
    min = c.get(Calendar.MINUTE);
    sec = c.get(Calendar.SECOND);
    int ds = c.get(Calendar.AM_PM);
    if(ds==0)
        AM_PM="am";
    else
        AM_PM="pm";

    Toast.makeText(getActivity(), ""+hour+":"+min+AM_PM, Toast.LENGTH_SHORT).show();

    if (hour >= 8 && AM_PM.matches("am") || hour >= 12 && AM_PM.matches("pm") || hour <= 7 && min <=59 && sec <=59  && AM_PM.matches("pm") ){
        fill_with_data_shift1();
    }else if (hour >= 20 && AM_PM.matches("pm") || hour >= 00 && AM_PM.matches("am")){
        fill_with_data_shift2();
    }
yws3nbqq

yws3nbqq1#

使用现代java日期和时间api,这是很自然的:

LocalTime currentTime = LocalTime.now(ZoneId.of("Asia/Manila"));

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("h:mma", Locale.ENGLISH);
    String displayTime = currentTime.format(dtf).toLowerCase();
    Toast.makeText(getActivity(), displayTime, Toast.LENGTH_SHORT).show();

    if (currentTime.isBefore(LocalTime.of(8, 0))
            || ! currentTime.isBefore(LocalTime.of(20, 0))) { // not-before means on or after
        fill_with_data_shift2();
    } else {
        fill_with_data_shift1();
    }

因为获取本地时间是一个时区敏感的操作,所以要三思而后行 LocalTime.now() . 如果要使用设备的时区设置,请通过 ZoneId.systemDefault() .
对于android,您可以在threetenabp中获得现代api,请参阅以下问题:如何在android项目中使用threetenabp。

4xrmg8kj

4xrmg8kj2#

基本上你的代码应该是:

// between 8am and 8pm (not included)
if (hour >= 8 && hour < 20) {
    // Do something
} else { // the rest of the time
    // Do something else
}

分,秒和其他的都不重要。

相关问题