Преобразование текстовых данных в дату - PullRequest
0 голосов
/ 25 июня 2009

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

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


        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

12/13/2009 или 12/13/9 ---- конвертированная дата ------- 12/13/2009

10/16 ---- дата конвертации ----------------------- 16/10 / 2009

2009/12/10 ---- дата конвертации ------------------ 10/12/2009


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


* 1 022 * 16/10-дд / мм

060209 или 06022009 ddmmyyyy

13122009 ммддйййй

20091213 ггггммдд

20091312 ггггдмм

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


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

Ответы [ 7 ]

1 голос
/ 25 июня 2009

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

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

String.Format("{0:dd/MM/yyyy}", dt)
0 голосов
/ 29 июня 2009

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

Новое текстовое поле создается в явном виде, и с помощью функции 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();
         }

    }

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

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

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

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

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

ddmmyy или mmddyy или yyddmm

дд \ мм или мм \ дд или дд.мм или мм.дд

0 голосов
/ 25 июня 2009

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

например AJAX Toolkit Управление календарем

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

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

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

0 голосов
/ 25 июня 2009

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

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

0 голосов
/ 25 июня 2009

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

Например:

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

Edit: Используйте DateTime.TryParse (или DateTime.TryParseExact ) для проверки введенной даты.

DateTime date;
string error = "";
if (!DateTime.TryParse("12978434", out date))
{
    error = "Invalid date";
}
0 голосов
/ 25 июня 2009

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

Для остальных взгляните на DateTime.Parse (также упомянутый Benjol). Это должно решить вашу проблему для распространенных форматов, используемых во всем мире.

0 голосов
/ 25 июня 2009

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

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

...