如何获得时间范围

时间:2017-09-04 09:33:00

标签: java android time

我试图将时间范围从早上8点到晚上8点以及晚上8点到早上8点,我试图让时间表显示在来自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();
    }

2 个答案:

答案 0 :(得分:2)

使用现代Java日期&amp;时间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,请参阅this question: How to use ThreeTenABP in Android Project

答案 1 :(得分:1)

基本上你的代码应该是:

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

分钟,秒和其他所有事情都不重要。