如何解决Bot Framewok中的dateTime范围?

问题描述

Ciao,我在将DateTimeResolution转换为DateTime时遇到问题,该怎么办?

system.invalidCastException:无法将类型为“ System.DateTime”的对象转换为类型为“ System.Collections.Generic.List`1 [Microsoft.Bot.Builder.Dialogs.DateTimeResolution]”。

Auth::user()

解决方法

找到一个解决方案,我刚刚创建了实体DateTimeV2并创建了Resolve Method。

方法选自以下主题:Using the prebuilt entity datetimeV2 to capture daterange

private IList<Dictionary<string,string>> DateTimeResolutor(WaterfallStepContext stepContext)
        {
            IList<Dictionary<string,string>> resolutionValues = null;
            var culture = Culture.English;
            var r = DateTimeRecognizer.RecognizeDateTime(stepContext.Context.Activity.Text,culture);
            if (r.Count > 0 && r.First().TypeName.StartsWith("datetimeV2"))
            {
                var first = r.First();
                resolutionValues = (IList<Dictionary<string,string>>)first.Resolution["values"];
                var asString = string.Join(";",resolutionValues[0]);
                var subType = first.TypeName.Split('.').Last();
                if (subType.Contains("date") && !subType.Contains("range"))
                {
                    // a date (or date & time) or multiple
                    var moment = resolutionValues.Select(v => DateTime.Parse(v["value"])).FirstOrDefault();
                }
                else if (subType.Contains("date") && subType.Contains("range"))
                {
                    // range
                    var from = DateTime.Parse(resolutionValues.First()["start"]);
                    var to = DateTime.Parse(resolutionValues.First()["end"]);
                }
            }
            return resolutionValues;
        }

然后,我就可以获取变量的开始日期和结束日期:

var startDate = dateRange.FirstOrDefault()?["start"]);
var endDate = dateRange.FirstOrDefault()?["end"]);

我希望这对某人有帮助:)

我也这样做:

startDate = dateStart == DateTime.MinValue ? Convert.ToDateTime(((List<DateTimeResolution>)stepContext.Result).FirstOrDefault()?.Value) : startDate;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...