code: public final List<HourRanges> normalize() {
          final List<HourRange> today = new ArrayList<>();
          final List<HourRange> tommorrow = new ArrayList<>();
          for (final HourRange range : ranges) {
              final List<HourRange> nr = range.normalize();
              if (nr.size() == 1) {
                  today.add(nr.get(0));
              } else if (nr.size() == 2) {
                  today.add(nr.get(0));
                  tommorrow.add(nr.get(1));
              } else {
                  throw new IllegalStateException("Normalized hour range returned an unexpected number of elements: " + nr);
              }
          }
          final List<HourRanges> list = new ArrayList<>();
          list.add(new HourRanges(today.toArray(new HourRange[today.size()])));
          if (tommorrow.size() > 0) {
              list.add(new HourRanges(tommorrow.toArray(new HourRange[tommorrow.size()])));
          }
          return list;
      }
docs: If the hour ranges represent two different days, this method returns two hour ranges, one for each day. Example:
  '09:00-14:00+18:00-03:00' will be splitted into '09:00-14:00+18:00-24:00' and '00:00-03:00'.
  
  @return This range or range for today and tomorrow.