Датчик времени / времени для .NET? [закрыто]



Answers

Я не знаю, но есть Java-порт, называемый jchronic . Если ничего другого, это могло бы стать хорошей точкой для прыжка. Или, возможно, вы можете использовать полуавтоматический переводчик Java на C #, такой как Octopus, чтобы его перевести. (Или что-то лучше, если кто-нибудь знает что-нибудь.)

Хорошо, еще один возможный путь: можете ли вы использовать хронический код с помощью IronRuby ?

Question

Кто-нибудь знает анализатор даты и времени .NET, подобный Chronic для Ruby (обрабатывает такие вещи, как «завтра» или «3 вечера следующего дня»)?

Примечание. Я пишу Ruby (так я знаю о Chronic), но этот проект должен использовать .NET.




Палми, у меня недавно было одно и то же требование, поэтому я пошел вперед и написал простой парсер. Это не самый приятный код, но он будет обрабатывать такие вещи, как:

«Сегодня в 2 часа дня» «Вторник в 14:00 - 15 июля 2010 года в 2 часа ночи» «Предыдущий год в 2 часа ночи - Томмор в 14:30» «18 июля 2010 года в 2:45 вечера»

Застрял на кодексе, потому что, возможно, кому-то это будет полезно. Проверьте это: http://timestamper.codeplex.com/




@Blair Конрад - Хорошие идеи! Я пытался запустить Chronic под IronRuby, но имел некоторые проблемы с зависимостями - я не знаю, что он еще готов.

Я нашел проект Codeplex ( DateTimeEnglishParser ), который пытается сделать то же самое. Он не обрабатывает годы или время, но это хорошее начало. Я немного поработал над проектом и внес исправление, чтобы лучше обрабатывать написанные числа.

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




Я не знаю об этом, но это звучит как крутая проблема, поэтому вот мой удар (VB.NET):

Private Function ConvertDateTimeToStringRelativeToNow(ByVal d As DateTime) As String
    Dim diff As TimeSpan = DateTime.Now().Subtract(d)
    If diff.Duration.TotalMinutes < 1 Then Return "Now"

    Dim str As String
    If diff.Duration.TotalDays > 365 Then
        str = CInt(diff.Duration.TotalDays / 365).ToString() & " years"
    ElseIf diff.Duration.TotalDays > 30 Then
        str = CInt(diff.TotalDays / 30).ToString() & " months"
    ElseIf diff.Duration.TotalHours > 24 Then
        str = CInt(diff.Duration.TotalHours / 24) & " days"
    ElseIf diff.Duration.TotalMinutes > 60 Then
        str = CInt(diff.Duration.TotalMinutes / 60) & " minutes"
    Else
        str = CInt(diff.Duration.TotalMinutes).ToString() & " minutes"
    End If
    If str.StartsWith("1") Then str = str.SubString(0, str.Length - 1)
    If diff.TotalDays > 0 Then
        str &= " ago"
    Else
        str &= " from now"
    End If
    Return str
End Function

Это действительно не так сложно, как те, которые уже существуют, но все работает хорошо, я думаю. Может быть хорошим методом расширения.




Links