public void LoadEndTimeCriteria(LuisResult result, TimeZoneInfo timezone)
        {
            var time     = result.ParseTime(timezone);
            var duration = result.ParseDuration();

            var end = time.Length >= 1
                ? time[0]
                : duration.HasValue && this.StartTime.HasValue
                    ? this.StartTime.Value.Add(duration.Value)
                    : (DateTimeOffset?)null;

            while (end.HasValue && end < DateTime.Now.AddMinutes(-15))
            {
                end = end.Value.AddDays(1);
            }

            this.EndTime = end;
        }
        public void LoadTimeCriteria(LuisResult result, TimeZoneInfo timezone)
        {
            var timeRange = result.ParseTimeRange(timezone);
            var time      = result.ParseTime(timezone);
            var duration  = result.ParseDuration();

            var start = timeRange.HasValue
                ? timeRange.Value.start
                : time.Length >= 1
                    ? time[0]
                    : time.Length == 1 && duration.HasValue
                        ? time[0]
                        : (DateTimeOffset?)null;

            if (start.HasValue && start >= DateTime.Now.AddSeconds(-10) && start <= DateTime.Now.AddSeconds(10))
            {
                // user said "now".. let's adjust a bit
                start = GetAssumedStartTime(start.Value);
            }
            while (start.HasValue && start < DateTime.Now.AddMinutes(-15))
            {
                start = start.Value.AddDays(1);
            }

            var end = timeRange.HasValue
                ? timeRange.Value.end
                : time.Length >= 2
                    ? time[1]
                    : duration.HasValue && start.HasValue
                        ? start.Value.Add(duration.Value)
                        : (DateTimeOffset?)null;

            while (end.HasValue && end < DateTime.Now.AddMinutes(-15))
            {
                end = end.Value.AddDays(1);
            }

            this.StartTime = start;
            this.EndTime   = end;
        }