Парсинг Пользователь ввел строку времени в класс DateTime / TimeSpan (C #) - PullRequest
2 голосов
/ 08 января 2011

У меня есть время, которое пользователь вводит в DateTime или TimeSpan (дата не важна).Например, необходимо иметь возможность интерпретировать

«8a», «0800», «8:00», «8:00», «8:00 a», «8:00 am» => как «08:00 "

Я пробовал метод DateTime.ParseExact, но в нем используется разделитель двоеточий между часами и минутами.Следовательно терпит неудачу на первых 4 случаях выше.TimeSpan также опирается на двоеточие.

Как я могу создать относительно надежный способ обработки множества способов ввода времени пользователями?Одна идея состояла в том, чтобы создать исчерпывающий список возможностей форматирования для System.Globalization.DateTimeFormatInfo.Но я не уверен, как обращаться с символом «а» или «я» и т. Д.

Идеи, пожалуйста.

Ответы [ 2 ]

2 голосов
/ 08 января 2011

Первые четыре случая в порядке:

  • var dateTime = DateTime.ParseExact ( "8" .Надеть ( "а", "Я"), "НТТ", System.Globalization.CultureInfo.CurrentCulture);
  • var dateTime = DateTime.ParseExact ( "0800", "HHMM", System.Globalization.CultureInfo.CurrentCulture);
  • var dateTime = DateTime.ParseExact ( "8 утра", "НТТ", System.Globalization.CultureInfo.CurrentCulture);
  • var dateTime = DateTime.ParseExact ("8 am "," h tt ", System.Globalization.CultureInfo.CurrentCulture);

Посмотрите на это для различных совпадений toString

1 голос
/ 08 января 2011

почему бы просто не изменить небольшой пользовательский интерфейс

1 - иметь два поля со списком по одному для выбора времени 1-12 чисел

2 - второй комбинированный список для выбора AM / PM, по умолчанию AM

таким образом, вы можете лучше контролировать формат времени, и вам не нужно писать много кода перехода на основе формата tme.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...