Работа с датами в языке C# требует чёткого понимания встроенных структур и методов. Для получения названий дней недели чаще всего используется структура DateTime, обладающая свойством DayOfWeek, возвращающим перечисление DayOfWeek. Это перечисление содержит значения от Sunday до Saturday, где воскресенье имеет числовое значение 0, а суббота – 6.
Если необходимо вывести все дни недели в цикле, удобно воспользоваться перечислением Enum.GetValues(typeof(DayOfWeek)). Это позволяет пройтись по каждому элементу перечисления и при необходимости привести его к строке с нужной локализацией. Такой подход особенно полезен при создании пользовательских интерфейсов, где требуется динамически отображать дни недели.
Для более гибкой работы с датами и их форматированием можно использовать CultureInfo.CurrentCulture.DateTimeFormat.DayNames. Это массив строк, содержащий полные названия дней недели в соответствии с текущей культурой системы. Он удобен, если необходимо работать исключительно с локализованными названиями без использования структуры DateTime.
Как получить текущий день недели с помощью DateTime
Для получения текущего дня недели в C# используется структура DateTime
из пространства имён System
. Метод DateTime.Now
возвращает текущие дату и время, а свойство DayOfWeek
позволяет определить день недели.
Пример получения:
DayOfWeek currentDay = DateTime.Now.DayOfWeek;
Console.WriteLine(currentDay);
Значение currentDay
будет одного из семи элементов перечисления DayOfWeek
: Sunday
, Monday
, Tuesday
, Wednesday
, Thursday
, Friday
, Saturday
.
var ruCulture = new System.Globalization.CultureInfo("ru-RU");
string dayName = DateTime.Now.ToString("dddd", ruCulture);
Console.WriteLine(dayName);
Этот способ возвращает полное название дня недели, например: «понедельник», «вторник» и т.д.
Для первой буквы с заглавной можно применить:
string formatted = char.ToUpper(dayName[0]) + dayName.Substring(1);
Console.WriteLine(formatted);
Преобразование числа в название дня недели
Для получения названия дня недели по его числовому значению в C# можно использовать перечисление DayOfWeek, встроенное в .NET. Значения перечисления начинаются с Sunday = 0 и заканчиваются Saturday = 6.
Если число находится в диапазоне от 0 до 6, преобразование выполняется через приведение типа:
int dayNumber = 3;
DayOfWeek day = (DayOfWeek)dayNumber;
Console.WriteLine(day); // Wednesday
using System.Globalization;
int dayNumber = 5;
DayOfWeek day = (DayOfWeek)dayNumber;
string dayName = CultureInfo.GetCultureInfo("ru-RU").DateTimeFormat.GetDayName(day);
Console.WriteLine(dayName); // пятница
Если пользователь вводит число, необходимо проверить диапазон:
if (dayNumber < 0 || dayNumber > 6)
Console.WriteLine("Ошибка: введите число от 0 до 6.");
else
Console.WriteLine(CultureInfo.GetCultureInfo("ru-RU").DateTimeFormat.GetDayName((DayOfWeek)dayNumber));
Для привязки к числам от 1 до 7 (понедельник – 1, воскресенье – 7), используйте смещение:
int input = 1;
int adjusted = input % 7;
DayOfWeek day = (DayOfWeek)adjusted;
string name = CultureInfo.GetCultureInfo("ru-RU").DateTimeFormat.GetDayName(day);
Console.WriteLine(name); // понедельник
Используйте ToLower() или ToUpper() для унификации регистра, если требуется дополнительная обработка строки.
Форматирование даты для отображения названия дня недели
Для получения названия дня недели в C# используется свойство DateTime.DayOfWeek
, возвращающее значение перечисления DayOfWeek
. Оно предоставляет английские названия: Sunday, Monday и т.д.
Чтобы вывести локализованное название дня, применяется метод ToString("dddd", cultureInfo)
. Например, для получения русского названия:
var date = new DateTime(2025, 5, 4);
var culture = new CultureInfo("ru-RU");
string dayName = date.ToString("dddd", culture);
Результатом будет строка "воскресенье"
. Чтобы получить название с заглавной буквы, используйте метод TextInfo.ToTitleCase
:
dayName = culture.TextInfo.ToTitleCase(dayName);
Для краткой формы используйте формат "ddd"
. Пример:
string shortDay = date.ToString("ddd", culture); // "вс"
Для автоматической локализации в соответствии с языком системы используйте CultureInfo.CurrentCulture
:
string localizedDay = date.ToString("dddd", CultureInfo.CurrentCulture);
Создание массива с днями недели вручную
Пример объявления:
string[] daysOfWeek = { "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье" };
При ручном создании массива соблюдайте следующий порядок:
- Начинайте с понедельника, если требуется ISO-порядок (понедельник – первый день недели).
for (int i = 0; i < daysOfWeek.Length; i++)
{
Console.WriteLine(daysOfWeek[i]);
}
Перевод названия дня недели на другой язык
Для перевода названия дня недели на другой язык в C# следует использовать класс CultureInfo из пространства имён System.Globalization. Он предоставляет доступ к локализованным строкам, включая названия дней недели.
Чтобы получить название текущего дня недели на нужном языке, создайте объект CultureInfo с соответствующим языковым кодом и используйте свойство DateTimeFormat. Например, для французского языка это будет «fr-FR», для немецкого – «de-DE».
Метод GetDayName возвращает полное название дня недели. Для сокращённого варианта используйте GetAbbreviatedDayName.
Если нужно перевести все дни недели сразу, итерируйтесь по значениям перечисления DayOfWeek и получайте название каждого дня через DateTimeFormat.
foreach (DayOfWeek day in Enum.GetValues(typeof(DayOfWeek)))
{
Console.WriteLine(culture.DateTimeFormat.GetDayName(day));
}
Поддерживаются все культуры, доступные в системе. Получить список можно через CultureInfo.GetCultures(CultureTypes.SpecificCultures).
Перечисление DayOfWeek
представляет собой тип данных, который автоматически присваивает каждому дню недели числовое значение. Это позволяет легко перебирать дни с помощью цикла.
Пример кода:
using System; class Program { static void Main() { foreach (DayOfWeek day in Enum.GetValues(typeof(DayOfWeek))) { Console.WriteLine(day); } } }
Если необходимо начать с понедельника, то можно воспользоваться следующим методом:
using System; class Program { static void Main() { var daysOfWeek = Enum.GetValues(typeof(DayOfWeek)); foreach (DayOfWeek day in daysOfWeek) { if (day != DayOfWeek.Sunday) { Console.WriteLine(day); } } } }
Также можно создать собственный массив строк с названиями дней недели и пройтись по нему с помощью цикла:
using System; class Program { static void Main() { string[] days = new string[] { "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье" }; foreach (string day in days) { Console.WriteLine(day); } } }
Этот подход дает больше гибкости, поскольку можно легко изменять порядок дней или добавлять дополнительные данные, например, аббревиатуры или особые заметки для каждого дня.