Работа с датой в 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:

Комментарии

2 комментария(ев)
аватар: zeus_god
zeus_god
Дата: СБ, 26/06/2010 - 21:53
Звание: Наблюдатель
Сообщений: 2

А в этом случае
month = new DateTime(2000, date.Month, 1).ToString("MMMM");
2000 и 1 что озночают?

аватар: Spider_NET
Spider_NET
Дата: ВС, 27/06/2010 - 10:11
Звание: Мастер
Сообщений: 2049

2000 - год
date.month - месяц
1 - число.

Посмотри подробное описание DateTime на msdn: ]]>http://msdn.microsoft.com/ru-ru/library/03ybds8y%28v=VS.90%29.aspx]]>