我有以下Java方法,它根据时间间隔返回String。间隔为6-14h时,它工作正常。
private String shiftCount()
{
Calendar time = Calendar.getInstance();
if ((time.get(Calendar.HOUR_OF_DAY) >= 0) && (time.get(Calendar.HOUR_OF_DAY) < 6)) return "-S1";
if ((time.get(Calendar.HOUR_OF_DAY) >= 6) && (time.get(Calendar.HOUR_OF_DAY) < 14)) return "-S2";
if ((time.get(Calendar.HOUR_OF_DAY) >= 14) && (time.get(Calendar.HOUR_OF_DAY) < 22)) return "-S3";
if ((time.get(Calendar.HOUR_OF_DAY) >= 22) && (time.get(Calendar.HOUR_OF_DAY) < 24)) return "-S1";
return null;
}
但如果我需要,例如6:10-14:10间隔?
答案 0 :(得分:2)
您还必须检查MINUTE
字段。
使用joda-time,这将不那么冗长。
答案 1 :(得分:2)
您不需要间隔,因为每个区域都会触及另一个区域。
private String shiftCount() {
Calendar time = Calendar.getInstance();
// the hours is always >= 0
if (time.get(Calendar.HOUR_OF_DAY) < 6) return "-S1";
if (time.get(Calendar.HOUR_OF_DAY) < 14) return "-S2";
if (time.get(Calendar.HOUR_OF_DAY) < 22) return "-S3";
// the hour is always < 24.
return "-S1";
}
或者您可以在一天中的某个时间使用长时间,这样您就可以使用任何小时/分钟等组合。
long now = System.currentTimeMillis();
// time of the day in minutes.
long time = ((now + TimeZone.getDefault().getOffset(now)) % 86400000) / 60000;
if (time < 6*60 + 10) return "-S1";
if (time < 14*60 + 10) return "-S2";
if (time < 22*60) return "-S3";
return "-S1";