Работа с датой в C#
У многих наверно возникала проблема с отображением даты в формате, к примеру, 10 июня 2009 года. Visual Studio C# предоставляет большие возможности по работе с Датой и Временем…
На старт!
Конечно, можно было бы использовать следующий вариант для преобразования месяца в прописной вид
public static string NameMonthPropis(int month) { return new DateTime(2000, month, 1).ToString("MMMM"); }
Что результатом будет для даты 21.09.2009 -> Сентябрь, т.е. если представить дату 21.09.2009 с прописным месяцем, то получится не очень красиво.
public static string NameMonthPropis(DateTime date) { string month; month = new DateTime(2000, date.Month, 1).ToString("MMMM"); return Convert.ToString(date.Day) + " " + month + " " + Convert.ToString(date.Year) + " года"; }
Результат: 21 Сентябрь 2009 года
Мдя, не очень то и красиво смотрится. Как же быть и как привести к нормальному виду? Очень просто: для того чтобы решить задачу и привести к нормально читабельному виду, я сделаю следующее: создам массив из перечисляемых месяцев и буду выбирать из массива тот месяц который мне необходим для текущего месяца DataTime.Today.Month.
public static string NameMonthPropis(DateTime date) { string[] d = new string[]// объявляем текстовый массив и перечисляем месяца { "Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря" }; return Convert.ToString(date.Day) + " " + d[Convert.ToUInt32(date.Month-1)] + " " + Convert.ToString(date.Year) + " года"; }
В итоге получим на выходе: 01 Сентября 2009 года, именно тот результат что нам и был нужен .. Так как DateTime.Today.Month идёт в интервале от 1 до 12, а в массиве данные идут от 0, то мы минусуем -1.
Аналогично можно поступить и с Днями недели:
public static string DaysOfWeekPropis(DateTime date) { int FCount; //определяем переменную для количества значений в массиве FCount = 7; string[] d = new string[FCount]; d[0] = "Воскресенье"; //заполняем массив d[1] = "Понедельник"; d[2] = "Вторник"; d[3] = "Среда"; d[4] = "Четверг"; d[5] = "Пятница"; d[6] = "Суббота"; return d[Convert.ToUInt32(date.DayOfWeek)]; }
Но можно воспользоваться и стандартными возможностями:
public static string DayOfWeekPropis(DateTime date) { return date.ToString("dddd"); }
Результат будет одним: понедельник (только в первом случае название месяца будет с большой буквы). Если же поиграться с форматом DayOfWeekPropis и вместо 4-х d (“dddd”) поставить 3-d, то выходное значение будет представлять в сокращённом виде, т.е. Пн, Вт, Ср и т.д., этого же результат можно добиться и через первый вариант.
В C# предоставляются многочисленные возможности по работе с датой. Перечислю некоторые из них и приведу примеры их использования:
AddDays – прибаляет указанное число к текущему дню.
Пример:
текщий день – 21.09.2009
DateTime.Today.Date.AddDays(2)
Результат - 23.09.2009
DaysInMonth – возращает количество в указанном месяце
Пример:
Текущая дата: 21.09.2009
DateTime.DaysInMonth(2009,9) //необходимо указать год и месяц
Результат: 30 //30 дней в месяце сентябрь
AddMonths - прибаляет указанное число к текущему месяцу
Пример:
Текущий день – 21.09.2009
DateTime.Today.AddMonths(2)
Результат - 21.11.2009 //получится Ноябрь месяц
AddYears – прибавляет указанное число лет к текущему году
Пример:
Текщий день – 21.09.2009
DateTime.Today.AddYears(2)
Результат - 21.11.2011
Ну вот в принципе и всё. Если что то не понятно из этого материала, то обязательно загляни в MSDN. Там есть все. Удачи!
Автор: Савельев Андрей aka dron-s
Сайт: http://www.reportingfor.info/ru/
e-mail:
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- 8617 просмотров



Комментарии
2 комментария(ев)Дата: СБ, 26/06/2010 - 21:53
А в этом случае
month = new DateTime(2000, date.Month, 1).ToString("MMMM");
2000 и 1 что озночают?
Дата: ВС, 27/06/2010 - 10:11
2000 - год
date.month - месяц
1 - число.
Посмотри подробное описание DateTime на msdn: ]]>http://msdn.microsoft.com/ru-ru/library/03ybds8y%28v=VS.90%29.aspx]]>