HDateTimeRange.fromString constructor

HDateTimeRange.fromString(
  1. String str,
  2. HTimeZone tz
)

Parse from string using the given timezone as context for date based ranges. The formats are:

  • "today"
  • "yesterday"
  • "{date}"
  • "{date},{date}"
  • "{dateTime},{dateTime}"
  • "{dateTime}" // anything after given timestamp Throw ParseException is invalid string format.

Implementation

factory HDateTimeRange.fromString(String str, HTimeZone tz) {
  // handle keywords
  str = str.trim();
  if (str == 'today') return HDateTimeRange.dateAndTZ(HDate.today(tz), tz);
  if (str == 'yesterday') {
    return HDateTimeRange.dateAndTZ(HDate.today(tz).minusDays(1), tz);
  }

  // parse scalars
  int comma = str.indexOf(',');
  late HVal start;
  HVal? end;
  if (comma < 0) {
    start = HZincReader(str).readVal()!;
  } else {
    start = HZincReader(str.substring(0, comma)).readVal()!;
    end = HZincReader(str.substring(comma + 1)).readVal();
  }

  // figure out what we parsed for start,end
  if (start is HDate) {
    if (end == null) return HDateTimeRange.dateAndTZ(start, tz);
    if (end is HDate) return HDateTimeRange.datesAndTZ(start, end, tz);
  } else if (start is HDateTime) {
    if (end == null) return HDateTimeRange(start, HDateTime.now(tz));
    if (end is HDateTime) return HDateTimeRange(start, end);
  }

  throw ParseError('Invalid HDateTimeRange: ' + str);
}