2017-09-04 110 views
-3

我试图让时间范围从上午8:00到下午8:00和晚上8:00到上午8:00,我试图让时间表显示它来自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(); 
    } 
+0

你得到的错误是什么? –

+0

有些时候,这种交流不符合。 –

+0

即使它不在那里,它也会显示轮班。 –

回答

1

基本上你的代码应该是:

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

分,秒和所有其余的并不重要。

2

使用现代的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,请参阅this question: How to use ThreeTenABP in Android Project