Преобразовать строку в формат datetime

#c#

#c#

Вопрос:

У меня здесь небольшая проблема, и я хотел бы знать, где моя ошибка и как ее исправить.

 string preConvDATE = monthCombobox2.Text   " "   datecombobox2.Text   ","  "0000";
//lets say the comboboxes contain something like this "January 1";

DateTime DT = DateTime.ParseExact(preConvDATE, "MMMM d, yyyy 00:00:00", System.Globalization.CultureInfo.InvariantCulture);
string strDate = DT.ToString("yyyy-mm-dd");
    try
    {
       //code that inserts strDate to a column in Mysql DB
    }
    catch
    {
      //msg
    }
  

почему «0000» для года? потому что я действительно планировал сохранить только месяц и дату, но понял, что могу просто сохранить это в формате datetime с указанием года, а затем при просмотре таблицы я бы просто использовал функции Mysql MONTH () и DATE (), объединенные для просмотра месяца и даты, которые я сохранил из monthCombobox2 и datecombobox2 .

Я также пытался:

 Convert.ToDateTime()
  

Но все равно не сработает.

Как мне правильно проанализировать MMMM d,yyyy формат даты, чтобы я мог снова преобразовать его в yyyy-mm-dd и сохранить как datetime формат в базе данных? Большое вам спасибо 🙂

Комментарии:

1. Зачем вам вообще нужно форматировать ее как строку, чтобы вставить в MySQL? Вы используете параметризованные SQL-запросы, верно? (Вы должны быть)

2. Ваша главная ошибка заключается в том, что вы создаете строку на основе пользовательских настроек (когда вы могли бы просто создать DateTime объект, используя его конструктор), а затем пытаетесь разобрать эту строку и переформатировать ее как другую строку. Это очень странный поступок.

3. new DateTime(year, month, day) ?

4. да, я пытаюсь сохранить события даты в базе данных. Просто месяц и день.

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

Ответ №1:

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

 string preConvDATE = monthCombobox2.Text   "/"   datecombobox2.Text "/"   DateTime.Now.Year.ToString();
DateTime DT = DateTime.ParseExact(preConvDATE, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture);

string strDate = DT.ToString("yyyy-MM-dd");
  

Я надеюсь, что это решит вашу проблему. Удачного кодирования!

Комментарии:

1. да, это то, что я сделал :), и я больше не разбирал текст, я просто использовал функцию Mysql Monthname () для просмотра номера месяца в качестве названия месяца. спасибо, что нашли время ответить на мой вопрос 🙂