Вопрос

У меня есть ситуация, в которой мне нужно преобразовать текстовые данные в дату.

Для этого я использовал следующий код!


        string s = textBox1.Text;
        if (String.IsNullOrEmpty(s))
        {
            textBox2.Text = "Please enter any date.";

        }
        else
        {
            DateTime dt = DateTime.Parse(s);
            string day = dt.Day.ToString();
            string month = dt.Month.ToString();
            string year = dt.Year.ToString();
            s = day + "/" + month + "/" + year;
            textBox2.Text = s;
        }

Это изменит только следующие форматы данных.


10/10/09 или 10/10/2009---- преобразованная дата------10/10/2009

13.12.2009 или 12/13/9---- преобразованная дата-------12/13/2009

10/16---- преобразованная дата-----------------------16/10/2009

2009/12/10---- преобразованная дата------------------10/12/2009


Следующие форматы не будут изменены на дд /мм /гггг


16/10-dd/мм

060209 или 06022009 ddmmyyyyy

13122009 ммдддгггг

20091213 ггггммдд

20091312 ггггдмм

20.07.2009/20.07.2009/20-07-2009/20-07-09


Кто-нибудь может мне помочь с этим.Я очень новичок в c#

Это было полезно?

Решение 7

Спасибо за всю поддержку и рекомендации, которые вы, люди, дали.Я нашел решение своего запроса

Новое текстовое поле создается явно и с помощью функции ParseExact преобразуется значение DateTime.

Ниже приведена форма, которая была использована.альтернативный текст http://img146.imageshack.us/img146/2107/form.jpg

Код написан ниже


    private void button1_Click(object sender, EventArgs e)

      {
        string s = textBox1.Text;           
        string DFF = textBox3.Text;          

        //To check whether field is empty

        if (String.IsNullOrEmpty(s))
        { 
          MessageBox.Show("Please enter correct date");
          textBox2.Text = "Enter correct date";
        }           
        else
        {
            DateTime dt = DateTime.ParseExact(s, DFF, null);
            textBox2.Text = dt.ToShortDateString();
         }

    }

Этот код выдаст выходные данные для всех типов дат:

дд.мм.гггг или дд-мм-гггг или дд\мм\гггг

мм.дд.гггг или мм-дд-гггг или мм\дд\гггг

гггг.мм.дд или гггг-мм-дд или гггг\мм\дд

yyyy.dd.mm или гггг-дд-мм или гггг-мм-дд

ddmmyy или mmddyy или yyddmm

dd\мм или mm\dd или dd.mm или mm.dd

Другие советы

Боюсь, анализ дат немного сложнее.Это будет зависеть от настроек вашей культуры/страны.Посмотрите на перегрузки для ДатаВремя.Парсе...

Также обратите внимание, что когда вы выводите дату, вы также можете/должны использовать Строка.Формат, вот так:

String.Format("{0:dd/MM/yyyy}", dt)

Во-первых, вероятно, было бы более элегантно, если бы вы использовали DateTime.ToString метод со строкой формата, определяющей форму, в которой вы хотите, чтобы строка даты отображалась (информацию об этом можно найти здесь).

Что касается того, почему другие указанные вами форматы не анализируются в DateTime объект правильно, вам, вероятно, придется использовать DateTime.Parse(string, IFormatProvider) вариант и определите для этого свой собственный IFormatProvider.Вы можете найти это Статья MSDN может быть для этого полезен.

Вам придется написать свой собственный парсинг для всех нестандартных форматов.Кроме того, такие форматы, как «ггггммдд» и «ггггддмм», будут проблематичными, поскольку вам нужно будет, чтобы пользователь указал, какой формат ввода, или в некоторых случаях вы просто конвертируете неправильно.

В остальном посмотрите ДатаВремя.Парсе (Также упоминается Бенджолом), это должно решить вашу проблему для распространенных форматов, используемых во всем мире.

DateTime.Parse не может проанализировать все указанные вами комбинации.Я бы посоветовал вам сначала попробовать DateTime.TryParse, чтобы проверить, доступна ли входная дата для анализа.Если это возвращает false, используйте ParseExact (или, еще лучше, TryParseExact) для проверки каждого ожидаемого формата даты.

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

Вы можете использовать DateTime.ParseExact

Например:

DateTime.ParseExact("20090823", "yyyyMMdd", null);    
DateTime.ParseExact("16/10", "dd/MM", null);

Редактировать:Использовать DateTime.TryParse (или DateTime.TryParseExact), чтобы подтвердить введенную дату.

DateTime date;
string error = "";
if (!DateTime.TryParse("12978434", out date))
{
    error = "Invalid date";
}

Возможно ли использовать элемент управления DatePicker/Календарь вместо TextBox?

например Элемент управления календарем AJAX Toolkit

Это избавит вас от необходимости обрабатывать каждый возможный формат даты, который потенциально может указать пользователь.ИМХО, это также обеспечивает более приятный пользовательский опыт.

Обновление после комментария ОП:

Как предлагали другие авторы, я бы использовал DateTime.TryParse в качестве первого прохода для обработки строк даты в любом из поддерживаемых стандартных форматов.Тогда вам нужно будет использовать DateTime.ParseExact для каждого поддерживаемого нестандартного формата.Наконец, я думаю, вам нужно пометить ошибку для любых строк без даты или неподдерживаемых форматов даты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top