DateTime: требуется, чтобы пользователь вводил компонент времени - PullRequest
2 голосов
/ 21 апреля 2010

Проверить, является ли пользовательский ввод действительной датой или допустимым «дата + время», легко: .NET предоставляет DateTime.TryParse (и, кроме того, VB.NET предоставляет IsDate).

Теперь я хочу проверить, ввел ли пользователь дату , включая компонент времени .Таким образом, при использовании немецкой локали, 31.12.2010 00:00 должно быть в порядке, но 31.12.2010 не должно.

Я знаю, что могу использовать DateTime.TryParseExact , например:

Dim formats() As String = {"d.M.yyyy H:mm:ss", "dd.M.yyyy H:mm:ss", _
                           "d.MM.yyyy H:mm:ss", "d.MM.yyyy H:mm:ss", _
                           "d.M.yyyy H:mm", ...}
Dim result = DateTime.TryParseExact(userInput, formats, _
       Globalization.CultureInfo.CurrentCulture, ..., result)

но тогда я бы жестко закодировал немецкий формат указания дат (день точка месяц месяц год), что считается плохой практикой и создаст проблемы, если мы когда-нибудь захотим локализовать наше приложение.Кроме того, formats будет довольно большим списком всех возможных комбинаций (одна цифра, две цифры, ...).

Есть ли более элегантное решение?

Ответы [ 3 ]

2 голосов
/ 21 апреля 2010

Я не уверен, что это более элегантно, чем у вас уже есть, но как насчет:

  • Разделить усеченный ввод пробелами
  • Сделать TimeSpan.TryParse на последнем куске
  • Если это удастся, убедитесь, что значение результирующего TimeSpan является неотрицательным и меньше дня

Сделайте все это в дополнение к DateTime.TryParse для строки в целом, и у вас будет больше уверенности в том, что указан компонент времени.

1 голос
/ 21 апреля 2010

Я думаю, что вы должны разделить ввод пользователя, дату в текстовом поле (или что-то еще) и время в другом.

Другим решением было бы использование какого-то маскирующего элемента управления, при котором вы не устанавливаете порядок d / m / y, но вы применяете MM: SS, который одинаков в каждом разрезе.

Не совсем ответ на вопрос, но hth

0 голосов
/ 21 апреля 2010

Параметры форматирования даты / времени для культуры можно получить из свойства CultureInfo.DateTimeFormat . Так, например, чтобы получить полный шаблон даты / времени для текущей культуры, вы должны получить доступ:

CultureInfo.CurrentCulture.DateTimeFormat.FullDateTimePattern

Для меня в Великобритании это дает:

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