protected virtual TimeInfo GetTimeInfo(string time, string offset, DateTime?minimumUtcStartDate = null) { string field = DefaultDateField; if (!String.IsNullOrEmpty(time) && time.Contains("|")) { string[] parts = time.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries); field = parts.Length > 0 && AllowedDateFields.Contains(parts[0]) ? parts[0] : DefaultDateField; time = parts.Length > 1 ? parts[1] : null; } var utcOffset = GetOffset(offset); // range parsing needs to be based on the user's local time. var range = DateTimeRange.Parse(time, Foundatio.Utility.SystemClock.OffsetUtcNow.ToOffset(utcOffset)); var timeInfo = new TimeInfo { Field = field, Offset = utcOffset, Range = range }; if (minimumUtcStartDate.HasValue) { timeInfo.ApplyMinimumUtcStartDate(minimumUtcStartDate.Value); } timeInfo.AdjustEndTimeIfMaxValue(); return(timeInfo); }