
- •А.А. Волосевич
- •1. Работа с Числами
- •2. Дата и время
- •3. Работа со строками и текстом
- •4. Преобразование информации
- •5. Отношения равенства и порядка
- •Сравнение для выяснения равенства
- •Сравнение для выяснения порядка
- •6. Жизненный цикл объектов
- •Алгоритм «сборки мусора»
- •Финализаторы и интерфейс iDisposable
- •7. Перечислители и итераторы
- •8. Интерфейсы стандартных коллекций
- •9. Массивы и класс system.Array
- •10. Типы для работы с коллекциями-списками
- •11. Типы для работы с коллекциями-множествами
- •12. Типы для работы с коллекциями-словарями
- •13. Типы для создания пользовательских коллекций
- •14. Технология linq to objects
- •1. Оператор условия Where().
- •2. Операторы проекций.
- •3. Операторы упорядочивания.
- •4. Оператор группировки GroupBy().
- •5. Операторы соединения.
- •6. Операторы работы с множествами.
- •7. Операторы агрегирования.
- •8. Операторы генерирования.
- •9. Операторы кванторов и сравнения.
- •10. Операторы разбиения.
- •11. Операторы элемента.
- •12. Операторы преобразования.
- •15. Работа с объектами файЛовой системы
- •16. Ввод и вывод информации
- •Потоки данных и декораторы потоков
- •2. Классы для работы с потоками, связанными с хранилищами.
- •3. Декораторы потоков.
- •4. Адаптеры потоков.
- •Адаптеры потоков
- •17. Основы xml
- •18. Технология linq to xml
- •Создание, сохранение, загрузка xml
- •Запросы, модификация и трансформация xml
- •Пространства имён xml
- •19. ДОполнительные возможности обработки xml
- •20. Сериализация
- •Сериализация времени выполнения
- •Сериализация контрактов данных
- •21. Состав и взаимодействие сборок
- •22. Метаданные и получение информации о типах
- •23. Позднее связывание и кодогенерация
- •24. Динамические типы
- •25. Атрибуты
- •26. Файлы конфигуРации
- •27. Основы мНогопоточноГо программирования
- •28. Синхронизация потоков
- •29. Библиотека параллельных расширений
- •Параллелизм на уровне задач
- •Параллелизм при императивной обработке данных
- •Параллелизм при декларативной обработке данных
- •Обработка исключений и отмена выполнения задач
- •Коллекции, поддерживающие параллелизм
- •30. Асинхронный вызов методов
- •31. Процессы и домены
- •32. Безопасность
- •Разрешения на доступ
- •Изолированные хранилища
- •Криптография
- •33. Диагностика
2. Дата и время
В пространстве имён System определены три неизменяемые структуры для работы с датой и временем: TimeSpan, DateTime и DateTimeOffset.
Структура TimeSpan представляет интервал времени с точностью 100 нс. Для создания экземпляра структуры можно использовать один из её конструкторов, статические методы вида TimeSpan.FromЕдиницыВремени() или разность двух переменных типа DateTime.
var ts1 = new TimeSpan(20); // "тики", каждый = 100 нс
var ts2 = new TimeSpan(1, 20, 500); // часы, минуты, секунды
var ts3 = TimeSpan.FromHours(3.5);
Структура TimeSpan перегружает операции сравнения и аддитивные операции. Свойства TimeSpan позволяют обратиться либо к отдельному временному компоненту интервала (свойства Days, Hours, Minutes, Seconds, Milliseconds), либо выразить весь интервал через указанную единицу времени (TotalDays, TotalHours и т.п.)
TimeSpan ts = TimeSpan.FromDays(10) - TimeSpan.FromSeconds(1);
Console.WriteLine(ts.Days); // 9
Console.WriteLine(ts.Seconds); // 59
Console.WriteLine(ts.TotalDays); // 9.99998842592593
Console.WriteLine(ts.TotalSeconds); // 863999
Структуры DateTime и DateTimeOffset предназначены для хранения даты и времени. Интервал дат ‑ от 1 января 1 года нашей эры до 31 декабря 9999 года, точность времени – 100 нс. DateTimeOffset дополнительно позволяет сохранить смещение всемирного координированного времени (UTC offset), что даёт возможность правильно сравнивать даты разных часовых поясов.
Структура DateTime имеет конструкторы, позволяющие указать для создаваемого экземпляра год, месяц, день, часы, минуты, секунды, миллисекунды. Дополнительно можно задать параметр из перечисления DateTimeKind, который показывает, какое именно время содержит экземпляр (Unspecified, Local, Utc). Также можно задать используемый датой календарь – это влияет на алгоритм вычисления некоторых свойств даты. Конструкторы структуры DateTimeOffset дополнительно позволяют указать смещение UTC как значение TimeSpan1:
var dt1 = new DateTime(2012, 12, 21);
var dt2 = new DateTime(2012, 12, 21, 12, 0, 0, DateTimeKind.Local);
var dt3 = new DateTime(2012, 12, 21, new PersianCalendar());
var dto = new DateTimeOffset(dt1, TimeSpan.FromHours(-6));
Определено неявное преобразование DateTime к DateTimeOffset. Такие свойства структуры DateTimeOffset как UtcDateTime, LocalDateTime, DateTime дают возможность получить значение времени UTC в виде DateTime.
Используя DateTime и DateTimeOffset, текущее время и дату можно узнать при помощи свойств Now, Today, UtcNow. Обе структуры содержат свойства для чтения отдельных временных компонентов, а также методы для увеличения временных компонент на указанную (возможно, отрицательную) величину. Структуры DateTime и DateTimeOffset также перегружают операции сравнения и аддитивные операции.
var dt = DateTime.Today; // текущая дата (без времени)
Console.WriteLine(dt.Month); // узнаем текущий месяц
Console.WriteLine(dt.DayOfWeek); // и день недели
var changed_dt = dt.AddDays(-3.5);
DateTimeOffset dto = DateTime.Now; // неявное преобразование
Console.WriteLine(dto.Offset); // узнаем UTC offset