C# 在.NET内核中解析Timex表达式
使用LUIS engine,我在实体值中接收C# 在.NET内核中解析Timex表达式,c#,asp.net-core,botframework,azure-language-understanding,C#,Asp.net Core,Botframework,Azure Language Understanding,使用LUIS engine,我在实体值中接收XXXX-10-28作为日期 我曾尝试使用Chronic进行解析,但Chronic不适用于timex库/格式 我期望以下字符串作为输入 XXXX-10-28应等同于2018-10-28(未来) 2018-10-02TMO应等同于2018-10-02即明天 请注意,XXXX-XX表示YYYY-MM,但它没有数值 是否有任何库或方法可以将此类字符串解析为ASP.NET Core中的有效datetime格式?您可以使用或与一起使用来完成此操作 根据您的示
XXXX-10-28
作为日期
我曾尝试使用Chronic
进行解析,但Chronic不适用于timex
库/格式
我期望以下字符串作为输入
应等同于XXXX-10-28
(未来)2018-10-28
应等同于2018-10-02TMO
即2018-10-02
明天
XXXX-XX
表示YYYY-MM
,但它没有数值
是否有任何库或方法可以将此类字符串解析为ASP.NET Core
中的有效datetime
格式?您可以使用或与一起使用来完成此操作
根据您的示例,我认为您想要的格式字符串是yyyy-MM-dd
,尽管您可能需要稍微调整一下
例如:
var input = "2018-10-28";
var format = "yyyy-MM-dd";
DateTime parsed;
if (DateTime.TryParseExact(input, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out parsed))
{
// Do whatever you want with "parsed"
}
使用自定义格式模式:
using System;
using System.Globalization;
class MainClass {
public static void Main (string[] args) {
var format = "1234-10-30";
var date = DateTime.ParseExact(format, "yyyy-MM-dd", CultureInfo.InvariantCulture);
Console.WriteLine (date.ToString("dd/MM/yyyy"));
}
}
您可以使用Microsoft.Recognizers.Text.DataTypes.TimexExpression软件包。它是Microsoft识别器文本项目的一部分 我找到了两种使用此库的方法: 使用TimexProperty分析表达式并自己猜测年份: 使用TimexResolver解析时间
resolution.Values
将包含一个包含两个解析项的数组,一个用于该日期的上一次出现,另一个用于该日期的下一次出现(基于传递到resoluve方法的日期时间)
请注意,根据个人经验和我在github上看到的情况,在撰写本文时,这个软件包可以使用更高级的表达式。Timex是一个库,而不是一种格式。您发布的内容看起来像是
YYYY-MM-DD
,ISO8601日期格式,可以通过DateTime.Parse
,例如leDateTime.Parse(“2018-11-13”)
将返回值为11月11日的DateTime对象,2018@PanagiotisKanavosTimex实际上是一种格式。它由使用。请注意,2018-10-02TMO
并不意味着明天,而是“2018-10-02的早上”。YYYY-MM-DD
可以通过DateTime.Parse()解析
直接使用ParseExact
与YYYY-MM-DD
@PanagiotisKanavos一起使用是没有理由的,但是如果只有这种格式是正确的,这是OP的例子所暗示的。我最初的评论是OP只询问如何解析strig。不过,如果有任何可能混淆格式的话(因为涉及多个库?),代码应该确实验证输入
var parsed = new Microsoft.Recognizers.Text.DataTypes.TimexExpression.TimexProperty("XXXX-10-28");
Console.WriteLine(parsed.Year); // = null
Console.WriteLine(parsed.Month); // = 28
Console.WriteLine(parsed.DayOfMonth); // = 10
var resolution = Microsoft.Recognizers.Text.DataTypes.TimexExpression.TimexResolver.Resolve(new [] { "XXXX-10-28" }, System.DateTime.Today)