Java如何比较当前时间是否在两个时间范围内

时间:2014-10-17 20:37:48

标签: java date time jodatime

我有两次String t1 = "17:00:00-07:00"String t2 = "23:59:00-07:00",即当地时间下午5点和当地时间晚上11:59(我的时区为PT)。

假设我在EST时区。如何知道当前时间是否与时区差异在t1和t2之间?

我尝试使用:

ISODateTimeFormat.timeNoMillis()
        .parseDateTime(t1)
        .withZone(DateTimeZone.UTC)
        .toLocalTime()
        .toDateTimeToday();

但是当我期待像 17:00:00-04:00 之类的东西时,它会给我 20:00:00-04:00

1 个答案:

答案 0 :(得分:1)

假设ISODateTimeFormat.timeNoMillis()始终是合适的解析器,您希望使用Interval类。此外,使用parseLocalTime()代替parseDateTime(),然后convert it to a DateTime使用使用.withOffsetParsed() method以确保正确处理时区。

public static boolean isNowBetweenRange(String t1, String t2) {    
  DateTime time1 = normalizeString(t1);
  DateTime time2 = normalizeString(t2);

  Interval interval = new Interval(time1, time2);

  return interval.contains(DateTime.now());
}

private static final DateTimeFormatter FORMAT =
                  ISODateTimeFormat.timeNoMillis().withOffsetParsed();

private static DateTime normalizeString(String t1) {
  DateTimeZone zone = FORMAT.parseDateTime(t1).getZone();
  return FORMAT
      .parseLocalTime(t1)
      .toDateTimeToday(zone);
}