Проблема с типом данных DateTime - PullRequest
0 голосов
/ 19 февраля 2009

У меня проблема с типом данных DateTime. Через текстовое поле я хочу добавить лицо dateofbirth. Поскольку в C # нет типа данных date, я вынужден использовать тип данных DateTime, но при преобразовании TxtDateofBirth в DateTime я получаю сообщение об ошибке: «String не был распознан как действительный DateTime». Вот мое преобразование кода. Я сохранил этот код в событии добавления.

DateTime dateofbirth = Convert.ToDateTime(TxtDateOfBirth.Text);

Что мне делать?

Спасибо

Masum

Ответы [ 3 ]

3 голосов
/ 19 февраля 2009

Используйте DateTime.ParseExact со строкой формата, которая указывает только часть даты.

В качестве альтернативы, поскольку это ввод пользователя, используйте DateTime.TryParseExact, поэтому вам не нужно перехватывать исключение, если пользователь ввел неправильную дату:

using System;

class Test
{
    static void Main()
    {
        TestParsing("24/10/2009");
        TestParsing("flibble");
    }

    static void TestParsing(string text)
    {
        DateTime dt;

        if (DateTime.TryParseExact(text, "d", null, 0, out dt))
        {
            Console.WriteLine("Parsed to {0}", dt);
        }
        else
        {
            Console.WriteLine("Bad date");
        }
    }
}

Обратите внимание, что строка формата "d" означает "формат краткой даты" (см. "стандартную форму даты и времени в строках" и "строки формата пользовательских даты и времени" страницы в MSDN). «null» означает «использовать текущую культуру» - так что вышеупомянутое работает для меня в Великобритании, но вам нужно сделать строку «24.10.2009» в США. Вы можете указать конкретную культуру, если не хотите использовать текущее значение по умолчанию для потока. 0 означает дату и время по умолчанию. Посмотрите на страницу MSDN для получения дополнительной информации.

1 голос
/ 19 февраля 2009

Едва ли можно что-то добавить к ответам Джона, но в этом случае я бы хотел подчеркнуть:

Постарайтесь понять, что ваша проблема не в типе данных DateTime, а в том, что ваша строка даты не соответствует ожидаемому формату (основанному на региональных настройках / культуре потока), который имеет конструктор DateTime.

Вы говорите, что «вынуждены» использовать тип данных DateTime. Вы должны помнить, что Даты всегда должны рассматриваться как Даты. Я видел слишком много разработчиков, попавших в ловушку использования дат в качестве строк (и выполнения операций разделения / поиска) вместо использования DateTime, потому что они считают, что последнее слишком сложно.

1 голос
/ 19 февраля 2009

В качестве альтернативы используйте маску , чтобы пользователи могли вводить только действительные даты. (См. Раздел c # под примерами по данной ссылке)

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