日历 - 时间间隔

时间:2011-06-13 13:14:42

标签: java

我有以下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间隔?

2 个答案:

答案 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";