Время синтаксического анализа без даты в TextBox

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

Теперь, если вы введете дату в TextBox, а затем воспользуетесь DateTime.TryParse, вы сможете ввести ее в нескольких форматах (31 января 2007 г., 31 января 2007 г., 31 января 2007 г., 31 января). , 2007 и т. д.), и .NET поймет это и превратит в DateTime.

Но когда я использую DateTime.TryParse для строки типа "8 a" или "8:00 a", он этого не понимает.

Я знаю, что могу использовать ParseExact, но мне интересно, есть ли более гибкое решение. Я хочу, чтобы .NET получал 8:00 от "8:00" или "8:00" и оставил компонент даты по умолчанию 01.01.0001.


person Ryan Lundy    schedule 11.11.2008    source источник
comment
Есть ли веская причина использовать текстовое поле вместо, например, System.Windows.Forms.DateTimePicker с Format=Time?   -  person Greg D    schedule 16.12.2008
comment
Что ж, это приложение WPF, поэтому использование материалов WinForms не является моим первым выбором.   -  person Ryan Lundy    schedule 19.12.2008
comment
Ах, да, вы потеряете некоторые приятные функции WPF, если вернетесь к winforms, но это, безусловно, возможно, и я верю, что на горизонте появится элемент управления датой и временем для .Net 4.   -  person Greg D    schedule 25.12.2008


Ответы (4)


Вы всегда можете обмануть систему (довольно легко):

DateTime blah = DateTime.Parse("1/1/0001 " + myTimeString);

Я сам сделал что-то подобное.

person Timothy Khouri    schedule 11.11.2008

Я бы пересмотрел функциональность вашего пользовательского интерфейса и заменил его двумя полями со списком или какой-либо другой формой выбора времени.

В конце концов, даже самый лучший в мире анализатор времени все равно не пройдет тест идиота-пользователя.

За исключением этого, Parse.Exact - это то, что вам нужно.

person FlySwat    schedule 11.11.2008

Подумайте об этом, неважно. Я только что заметил, что если я использую «am» и «pm» вместо «a» и «p», все работает нормально. Предполагается, что сегодняшняя дата, а не 01.01.0001 по умолчанию, но для моих целей это не проблема.

(Тем не менее, приветствуется любое достаточно простое решение, позволяющее заставить «а» и «р» работать.)

person Ryan Lundy    schedule 11.11.2008
comment
Вы можете добавить букву m к пользовательскому вводу, если он не проходит первый TryParse. Хотя не уверен, что это хорошая идея - person dub; 12.11.2008
comment
Это очень хорошая мысль, даб. Немного глупо :), но мне нужен именно такой особый случай. - person Ryan Lundy; 12.11.2008

Вы можете использовать событие validating или validated для захвата текста и добавления «m».

person SeaDrive    schedule 11.11.2008