Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET内核中解析Timex表达式_C#_Asp.net Core_Botframework_Azure Language Understanding - Fatal编程技术网

C# 在.NET内核中解析Timex表达式

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格式?您可以使用或与一起使用来完成此操作 根据您的示

使用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
格式?

您可以使用或与一起使用来完成此操作

根据您的示例,我认为您想要的格式字符串是
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
,例如le
DateTime.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)