Работа с DateTime C#
В этой статье мы будем манипулировать информацией DateTime, начиная с настройки значений DateTime. Это может быть достигнуто с помощью простых операторов или, для более сложного управления, с помощью методов DateTime.
Операторы сложения и вычитания
В структуре DateTime можно использовать два арифметических оператора. Это сложение ( + ) и вычитание ( -). Для каждого требуется два операнда. Первый - это значение DateTime для изменения, а второй - TimeSpan, содержащий количество времени для добавления или удаления.
DateTime theDate = DateTime.Parse("2 Jan 2017 20:16:00");
// Добавить один час, одну минуту и одну секунду
theDate = theDate + new TimeSpan(1, 1, 1); // theDate = 2 Jan 2017 21:17:01
// Вычесть двадцать пять дней
theDate = theDate - new TimeSpan(25, 0, 0, 0); // theDate = 8 Dec 2016 21:17:01Эти два арифметических оператора могут также использоваться в качестве составных операторов присваивания. Ниже показано это после использования метода Parse для создания значения TimeSpan из строки.
DateTime theDate = DateTime.Parse("2 Jan 2017 20:15:00");
// Добавить один час, одну минуту и одну секунду
theDate += TimeSpan.Parse("01:01:01"); // theDate = 2 Jan 2017 21:16:01
// Вычесть двадцать пять дней
theDate -= TimeSpan.Parse("25.00:00:00"); // theDate = 8 Dec 2016 21:16:01Методы Add
Методы Add позволяют больше контролировать обработку значений DateTime. Первым из них является сам метод Add, который добавляет TimeSpan к DateTime:
DateTime theDate = DateTime.Parse("2 Jan 2019 21:14:03");
TimeSpan duration = TimeSpan.Parse("1.01:01:01");
theDate = theDate.Add(duration); // theDate = 3 Jan 2019 22:15:04Метод Add обеспечивает не намного больший контроль над вычислением, чем простые арифметические операторы. Для более сложных расчётов, мы можем использовать методы добавления нескольких лет, месяцев и т. д. Существует даже метод Add, используемый для добавления тиков; один тик - одна десятимиллионная секунды. Все эти методы называются Add, за которым следует добавляемая единица времени. Значения могут вычитаться путем передачи отрицательного параметра методу Add. Каждый метод принимает одно число двойной точности (double) в качестве параметра, за исключением AddTicks, который требует длинный целочисленный параметр (long).
DateTime theDate = DateTime.Parse("2 Jan 2018);
theDate = theDate.AddYears(1); // theDate = 2 Jan 2019
theDate = theDate.AddMonths(2); // theDate = 2 Mar 2019
theDate = theDate.AddDays(1.5); // theDate = 3 Mar 2019 12:00:00
theDate = theDate.AddHours(-6); // theDate = 2 Mar 2019 06:00:00
theDate = theDate.AddMinutes(150); // theDate = 2 Mar 2019 08:30:00
theDate = theDate.AddSeconds(10.5); // theDate = 2 Mar 2019 08:30:10.5
theDate = theDate.AddMilliseconds(499); // theDate = 2 Mar 2019 08:30:10.999
theDate = theDate.AddTicks(10000); // theDate = 2 Mar 2019 08:30:11Метод Subtract
Метод Subtract предоставляет функциональность, аналогичную основному методу Add. Однако, его можно использовать двумя способами. Во-первых, сроки могут быть вычтены из datetime и будет возвращен новый объект datetime. Во-вторых, одно значение DateTime может быть вычтено из другого, чтобы получить разницу во времени как TimeSpan.
DateTime theDate = DateTime.Parse("2 Jan 2007");
TimeSpan subtract = TimeSpan.Parse("1.01:00:00");
DateTime startDate = DateTime.Parse("1 Jan 2007");
DateTime endDate = DateTime.Parse("2 Jan 2007 12:00:00");
TimeSpan diff;
// Вычесть TimeSpan из DateTime
theDate = theDate.Subtract(subtract); // theDate = 31 Dec 2006 23:00:00
// Найти разницу между двумя датами
diff = endDate.Subtract(startDate); // diff = 1.12:00:00Примечание: в приведенном выше примере разница между датами положительна, потому что вычитаемое время вычитается раньше, чем вычитаемое. Если верно обратное, то результат будет отрицательным.
Мировое и локальное преобразование типа datetime
Структура DateTime позволяет хранить значения всемирного координированного (UTC) и местного времени. Вы также можете конвертировать между этими значениями с помощью методов ToUniversalTime и ToLocalTime. В следующем примере Rangoon был выбран в настройках часового пояса окна для его смещения на шесть с половиной часов от UTC.
DateTime localDate = DateTime.Parse("1 Jul 2007 12:00");
DateTime utcDate = localDate.ToUniversalTime(); // 1 Jul 2007 05:30
DateTime rangoon = utcDate.ToLocalTime(); // 1 Jul 2007 12:00Преобразование из DateTime в String
Структура DateTime предоставляет несколько методов для преобразования информации о дате и времени в строки, которые идеально подходят для отображения.
Основные преобразования
При установке Microsoft Windows пользователь выбирает регион, в котором он живет. Эта информация используется для определения формата дат и времени. Некоторые пользователи могут настроить свои настройки для достижения своих предпочтений для длинных и коротких дат и времени. Как разработчики, мы должны уважать их выбор, гарантируя, что данные наших программ используют эти параметры.
Структура DateTime предоставляет четыре метода преобразования значений DateTime в строки. Каждый из них позволяет автоматически генерировать строку, содержащую длинную или короткую дату или время. Имена методов: ToLongDateString, ToShortDateString, ToLongTimeString и ToShortTimeString. Ни одна из функций не имеет параметров.
Использование ToString со спецификаторами формата
Основное форматирование, предоставляемое вышеуказанными методами преобразования, полезно во многих случаях. Для большего контроля с помощью метода ToString можно указать спецификатор формата. Это позволяет использовать более широкий диапазон стилей даты и времени. Однако это ограничивает контроль пользователя над тем, как они просматривают вывод приложения.
DateTime theDate = DateTime.Parse("3 Jan 2007 21:25:30");
string result;
result = theDate.ToString("d"); // result = "03/01/2007"
result = theDate.ToString("f"); // result = "03 January 2007 21:25"
result = theDate.ToString("y"); // result = "January 2007"Доступные спецификаторы формата
Полный список спецификаторов формата для преобразования DateTime можно посмотреть тут.
Стандартные спецификаторы формата полезны в большинстве случаев. Однако в некоторых случаях необходимо иметь полный контроль над позиционированием и стилем каждого элемента информации о дате и времени. Для этого можно использовать особые форматы, позволяющие создать дату по точному шаблону с использованием любой комбинации элементов из DateTime.
DateTime theDate = DateTime.Parse("3 Jan 2007 21:25:30");
string result;
result = theDate.ToString("d-MM-yy"); // result = "3-01-07"
result = theDate.ToString("HH:mm"); // result = "21:25"
result = theDate.ToString("h:mm tt"); // result = "9:25 PM"В приведенном выше примере показаны несколько форматов и результаты. Полный список кодов форматирования выглядит следующим образом:
Спецификатор | Описание | Пример |
---|---|---|
y | Год с одной цифрой. Если год не может быть указан одной цифрой, то автоматически используются две цифры. | "7" "95" |
yy | Двузначный год с ведущими нулями, если требуется | "07" |
yyyy | Полный четырехзначный год. | "2007" |
g or gg | Индикатор Anno Domini (AD). | "A.D." |
M | Однозначное число месяца. Если месяц не может быть указан одной цифрой, то автоматически используются две цифры. | "1" "12" |
MM | Двузначный номер месяца с ведущими нулями при необходимости | "01" |
MMM | Трехбуквенная аббревиатура месяца | "Jan" |
MMMM | Название месяца. | "January" |
d | Однозначный номер дня. Если день не может быть указан в одной цифре, то автоматически используются две цифры. | "3" "31" |
dd | Двузначный номер дня с ведущим нулем при необходимости | "03" |
ddd | Трехбуквенное название дня абревиатурой. | "Wed" |
dddd | Имя дня. | "Wednesday" |
h | Одноциферный час с использованием двенадцатичасового формата. Если час не может быть указан в одной цифре, то автоматически используются две цифры. | "9" "12" |
hh | Две цифры часа при двенадцати часовом формате с ведущими нулями при необходимости. | "09" |
H | Час с одной цифрой, используя формат двадцать четыре часа. Если час не может быть указан в одной цифре, то автоматически используются две цифры. | "1" "21" |
HH | Две цифры часа в формате двадцать четыре часа с ведущими нулями при необходимости. | "09" |
t | Однобуквенный индикатор AM или PM, как правило, для использования с двенадцатичасовыми значениями часов. | "A" "P" |
tt | Двухбуквенный индикатор AM или PM, как правило, для использования с двенадцатичасовыми значениями часов. | "AM" "PM" |
m | Однозначное число минут. Если минута не может быть указана одной цифрой, то автоматически используются две цифры. | "1" "15" |
mm | Двухзначные минуты с ведущими нулями, если требуется. | "01" |
s | Однозначное число секунд. Если секунда не может быть указана одной цифрой, то автоматически используются две цифры. | "1" "59" |
ss | Секунды в двузначном формате с ведущими нулями при необходимости | "01" |
f | Доля секунды. До семи f могут быть включены, чтобы указать количество десятичных знаков для отображения. | "0" "0000000" |
z | Одноразрядное смещение часового пояса, указывающее разницу в часах между местным временем и временем по UTC. Если смещение не может быть задано одной цифрой, то автоматически используются две цифры. | "+6" "-1" |
zz | Двухзначное смещение часового пояса, указывающее разницу в часах между местным временем и временем UTC с ведущими нулями, если требуется | "+06" |
zzz | Смещение полного часового пояса, указывающее разницу в часах и минутах между местным временем и временем UTC с ведущими нулями, если требуется. | "+06:00" |
Некоторые коды форматирования используют ту же букву, что и спецификатор формата. При использовании в строке формата, которая больше одного символа в длину это не представляет проблемы. Если необходимо использовать строку формата изображения с одним символом, букве должен предшествовать знак процента (%), чтобы указать, что спецификатор стандартного формата не должен использоваться.
DateTime theDate = DateTime.Parse("13 Apr 2019 08:00:30");
string result;
result = theDate.ToString("d"); // result = "13/04/2019"
result = theDate.ToString("%d"); // result = "13"
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.