Ответ
DateTime в C# — это структура (struct), то есть значимый тип (value type). Она определена в пространстве имен System и представляет собой момент времени, обычно выраженный как дата и время суток.
Ключевые характеристики:
- Диапазон значений: От полуночи 1 января 0001 года до 23:59:59 31 декабря 9999 года.
- Точность: Выражается в тиках (ticks), где 1 тик = 100 наносекунд.
- Представление: Может хранить время как локальное (Local), всемирное координированное (UTC) или неопределенное (Unspecified).
Примеры создания и использования:
// Текущая дата и время (локальные)
DateTime nowLocal = DateTime.Now;
// Текущее время в UTC (предпочтительно для хранения и межсерверного взаимодействия)
DateTime nowUtc = DateTime.UtcNow;
// Создание конкретной даты
var birthDate = new DateTime(1990, 5, 15); // 15 мая 1990 года
var meetingTime = new DateTime(2023, 10, 27, 14, 30, 0); // 27.10.2023 14:30:00
// Операции с датами
DateTime tomorrow = DateTime.Today.AddDays(1);
TimeSpan duration = meetingTime - nowLocal;
bool isLeapYear = DateTime.IsLeapYear(2024);
Важные особенности:
-
Иммутабельность: Все методы, изменяющие
DateTime(например,AddDays,AddHours), возвращают новый экземпляр структуры. Исходное значение не изменяется.DateTime date = new DateTime(2023, 1, 1); DateTime newDate = date.AddMonths(3); // date останется 01.01.2023 Console.WriteLine(newDate); // Вывод: 01.04.2023 -
Форматирование и парсинг:
string isoString = nowUtc.ToString("o"); // "2023-10-27T12:34:56.789Z" (стандарт ISO 8601) bool success = DateTime.TryParse("2023-12-31", out DateTime result); -
Для работы с часовыми поясами используйте тип
DateTimeOffset, который явно хранит смещение от UTC, или библиотекуTimeZoneInfo.DateTimeсам по себе не содержит информации о часовом поясе, только флагKind(Utc, Local, Unspecified). -
Альтернатива для высокоточных измерений интервалов: Для замера времени выполнения кода используйте
Stopwatch, а не разностьDateTime.