Разбор выражений Timex в .NET Core - PullRequest
0 голосов
/ 01 октября 2018

Используя движок LUIS, я получаю XXXX-10-28 в качестве даты в значении сущности.

Я пытался использовать Chronic для анализа, но Chronic не работает с timex библиотекой / форматами.

Я ожидаю следующие строки в качестве входных данных

  • XXXX-10-28 должно равняться 2018-10-28 (будущее)
  • 2018-10-02TMO должно равняться 2018-10-02 т.е. tomorrow

Обратите внимание, что XXXX-XX представляет YYYY-MM но у него нет numeric значений

Существует ли какая-либо библиотека или способ для анализа таких строк в допустимом формате datetime в ASP.NET Core?

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Использовать шаблон пользовательского формата:

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"));
  }
}

Пример

0 голосов
/ 14 июня 2019

Вы можете использовать пакет Microsoft.Recognizers.Text.DataTypes.TimexExpression из NuGet .Это часть проекта Microsoft Recognizer Text здесь, на github

Я нашел два способа использования этой библиотеки:

Разобрать выражение с помощью TimexProperty и угадать год самостоятельно:

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

Разрешать времена, используя TimexResolver

var resolution = Microsoft.Recognizers.Text.DataTypes.TimexExpression.TimexResolver.Resolve(new [] { "XXXX-10-28" }, System.DateTime.Today)

resolution.Values будет содержать массив с двумя записями разрешения, одна для предыдущего вхождения этой даты и одна для следующейпоявление этой даты (на основе DateTime, который вы передаете в метод Resolve.

Обратите внимание, что из личного опыта и из того, что я видел на github, этот пакет на момент написания может быть весьма глючит с более продвинутыми выражениями.

0 голосов
/ 01 октября 2018

Вы можете использовать DateTime.TryParse или DateTime.TryParseExact вместе с пользовательской строкой формата даты / времени , чтобы выполнить это.

Исходя из вашего примера, я думаю, что вам нужна строка формата 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"
}
...