C # - Разбор частичных дат в разных форматах - PullRequest
3 голосов
/ 01 июля 2010

Для использования в методе поиска я хотел бы проанализировать частичные даты в разных форматах.Я хочу, чтобы пользователь мог выполнять поиск по дню и месяцу или месяцу и году, а также по дню и месяцу и году.

Но более проблематичным является то, что я хочу делать это во всех возможных форматах даты в зависимости от страны., пользователь находится внутри. Это страница ASP.NET, и я могу использовать CultureInfo и, следовательно, также CultureInfo.DateTimeFormat.

У вас есть идеи, как сделать что-то подобное?Я думаю, было бы здорово, если бы британский человек мог искать 16/05, в то время как американец мог бы ввести 05/16, или немец мог использовать 16.05, чтобы найти результат 16 мая.

Я думаю, что это могло быможно использовать DateTimeFormat.ShortDatePattern.Но как я могу использовать это, чтобы извлечь из них день, месяц и год?

Я думаю о таком использовании, как

public void GetDateParts(string SearchStr, out int? day, out int? month, out int? year)

Спасибо всем, кто может мне помочь с этим.

Ответы [ 2 ]

2 голосов
/ 01 июля 2010

Как и большинство из упомянутых вами, я думаю, что я выберу метод с указателем даты или выпадающими списками. Но для тех, кто заинтересован в другом решении:

Некоторое время я думал о разных форматах и ​​обнаружил, что в большинстве случаев они очень похожи. Поэтому я написал метод, который возвращает наиболее подходящую версию наиболее часто используемых шаблонов. Так что "д.м.г." -> 'd.m.y' или 'd / m y' -> 'd / m / y'.

public static string SimplifyDateFormat(DateTimeFormatInfo DTFI)
{
    StringBuilder SB = new StringBuilder(DTFI.ShortDatePattern.ToLower());

    SB.Replace("m y", "m/y").Replace(" 'г.'", "").Replace(" ", "").Replace("dd", "d")
    .Replace("mm", "m").Replace("yyyy", "y").Replace("yy", "y");

    if (SB[SB.Length - 1] == '.') SB.Remove(SB.Length - 1, 1);
    return SB.ToString();
}

Это уменьшает количество возможных форматов с 26 до 8:

  • д / м / у
  • d.m.y
  • д-т-у
  • г / м / д
  • y.m.d
  • у-м-д
  • м / д / г * * один тысяча двадцать-одна
  • m.d.y

Это только 3 различных формата для синтаксического анализа через регулярное выражение, если вы используете [/.-] для разделителей.

P.S. Все еще не решает проблему с частичными датами. Но возможен поиск с полной датой по всем культурам.

0 голосов
/ 01 июля 2010

Вы можете определить несколько форматов ввода, а затем наложить один из них (основываясь на информации о пользователе) в ваших формах. Что-то вроде:

«Введите дату (ДД-ММ): _ - _» для британского

«Введите дату (ММ-ДД): _ - _» для американца

и т.д ...

...