HDateTimeRange.fromString constructor
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);
}