VB.NET - любая строка для преобразования даты - PullRequest
1 голос
/ 14 октября 2011

Короткий вопрос. Я пытаюсь преобразовать строку в дату (чтобы поместить ее позже в команду INSERT). Моя проблема в том, что строка, которую я читаю, всегда отличается (нет правила, в каком формате она будет - так как это зависит от пользователя).

Я нашел такой фрагмент кода в стеке:

DateTime myDate = 
    DateTime.ParseExact("2009-05-08 14:40:52,531", 
                        "yyyy-MM-dd HH:mm:ss,fff",
                        System.Globalization.CultureInfo.InvariantCulture)

но в моем случае это не сработает, так как я не знаю, какой формат я собираюсь импортировать. Есть ли универсальная функция импорта, которая проверяет все известные форматы? Если сейчас, как я должен написать это? (пожалуйста, дайте мне несколько советов).

Спасибо за любые советы и подсказки заранее, Пит

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Если вы не (или не можете) проверить дату, когда пользователь вводит ее (чтобы убедиться, что она является действительной датой), то вы как бы облажались.

С учетом местных жителей 1/2/2011 может быть 1 февраля (Ирландия, Великобритания и Европа) или 2 января (США).

Даже если игнорировать местных жителей, это может стать волосатым, кто-то добавляет «четверг 13/10/11», 13-е - четверг, хорошо, что, если они ошибаются и вставляют «пятницу 13/10/11», или они просто укажите пятницу 10/11, это сегодня (пятница, 14 октября 2011 г.) или какая-то пятница в ноябре 2011 г.

Тогда вы получите интуитивно понятного пользователя, который вводит «Следующий четверг», теоретически вы тоже можете справиться с этим, не так ли?

Тогда вы получите опечатки, 112 // 2011, это 02.11.2011 или 12.01.2011?

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

0 голосов
/ 14 октября 2011

Нет, это невозможно, однако вы можете определить возможные formats в массиве и передать его методу ParseExact или TryParseExact.

Dim format() As String = {"dd-MM-yy", "dd/MM/yy"}

Dim myDate As DateTime = DateTime.ParseExact("2009-05-08 14:40:52,531",format, 
                      System.Globalization.CultureInfo.InvariantCulture))
...