Имеется ComboBox, который хранит месяца года в текстовом формате. Как можно записать номер месяца в DataTime?
Там где происходит добавление месяцев в список, нужный мне номер месяца сохранить сразу не могу, так как нужен выбор пользователя.
for (int i = 1; i <= 12; i++)
{
cmbMonth.Items.Add(now.ToString("MMMM"));
now = now.AddMonths(1);
cmbMonth.Text = DateTime.Now.ToString("MMMM");
}
Нужно из cmbMonth.Text получить название месяца, что бы записать полноценную дату выбранную пользователем. Но так-как месяца хранятся в виде текста, возникли проблемы. Как можно решить? (Писать цикл с месяцами и их номерами не вариант, так как текст месяца в ComboBox зависит от языка системы)
Ответ
Для перевода из String в DataTime есть пара хороших методов Parse и ParseExact. Вот второй и подойдет для данной задачи!
Суть следующая - Вы ему даете 3 аргумента:
string, где есть значения связанные со временем (будь то время, дата, месяц или еще что).
Некая маска, по которой метод ParseExact поймет, что находится в пункте 1.
Культура пользователя или указанная заранее.
Напишу пример к вашей задаче:
var m = "Декабрь";
DateTime dd = DateTime.ParseExact(m, "MMMM", System.Globalization.CultureInfo.CurrentCulture);
Console.WriteLine(dd);
Как видим я задал 3 параметра - месяц (декабрь), маска (полный формат месяца) и культура (текущая культура пользователя).
Результатом программа выдаст:
01.12.2018 0:00:00
Надеюсь это решит вашу проблему. Удачи!
Комментариев нет:
Отправить комментарий