Форматирование даты и времени в C#

  • Михаил
  • 12 мин. на прочтение
  • 102
  • 29 Sep 2022
  • 29 Sep 2022

Статья будет содержать справочную информацию. А если конкретнее, то я расскажу о форматировании даты/времени при выводе (а точнее, преобразовании в строку). Сначала я приведу примеры стандартных вариантов форматирования (эти варианты могут закрыть большинство Ваших потребностей), а во второй части, я коснусь пользовательских (кастомных) вариантов форматирования (дающих большее свободы программисту).

 

И так, как я говорил выше, начну со стандартных вариантов форматирования даты и времени, которые можно использовать в процессе преобразования даты в строку. Ниже, в табличной форме приведены основные стандартные варианты форматирования (в примерах в строку преобразовывается текущая дата/время):

ФорматРезультат

DateTime.Now.ToString(«D»)

22 ноября 2016 г.

DateTime.Now.ToString(«d»)

22.11.2016

DateTime.Now.ToString(«F»)

22 ноября 2016 г. 17:19:59

DateTime.Now.ToString(«f»)

22 ноября 2016 г. 17:19

DateTime.Now.ToString(«G»)

22.11.2016 17:19:59

DateTime.Now.ToString(«g»)

22.11.2016 17:19

DateTime.Now.ToString(«M»)

ноября 22

DateTime.Now.ToString(«O»)

2016-11-22T17:19:59.2628195+03:00

DateTime.Now.ToString(«R»)

Tue 22 Nov 2016 17:19:59 GMT

DateTime.Now.ToString(«s»)

2016-11-22T17:19:59

DateTime.Now.ToString(«T»)

17:19:59

DateTime.Now.ToString(«t»)

17:19

DateTime.Now.ToString(«U»)

22 ноября 2016 г. 14:19:59

DateTime.Now.ToString(«u»)

2016-11-22 17:19:59Z

DateTime.Now.ToString(«Y»)

Ноябрь 2016

Как видно, есть не так уж и мало различных стандартных вариантов форматирования даты (и времени) при преобразовании в строку, но иногда этого недостаточно. В таком случае, программист может задавать своё форматирование, используя комбинации из следующих вариантов (позже, я приведу несколько примеров компинирования):

ФорматОписание
dДень месяца. От 1 до 31 (без ведущего нуля)
ddДень месяца. От 01 до 31 (с ведущим нулем).
dddКраткое название дня недели
ddddПолное название дня недели
MМесяц. От 1 до 12 (без ведущего нуля)
MM Месяц. От 01 до 12 (с ведущим нулем)
MMMКраткое название месяца
MMMMПолное название месяца
yОдна или две последние цифры года (практически неактуально)
yyДве последние цифры года
yyyТри последние цифры года
yyyyЧетыре последние цифры года
yyyyyПять последних цифр года (будет не скоро)
hЧас. От 0 до 12. (без ведущего нуля)
hhЧас. От 00 до 12 (с ведущим нулем)
HЧас. От 0 до 23 (без ведущего нуля)
HHЧас. От 00 до 23 (с ведущим нулем)
mМинута. От 0 до 59 (без ведущего нуля)
mm Минута. От 00 до 59 (с ведущим нулем)
sСекунда. От 0 до 59 (без ведущего нуля)
ssСекунда. От 00 до 59 (с ведущим нулем)
от f до fffffffМиллисекунды. Выводимое количество цифр соответствует количеству «f»
KЧасовой пояс
tПоловина дня. A или P
ttПоловина дня. AM или PM
zСмещение в часах относительно GMT (без ведущего нуля)
zz Смещение в часах относительно GMT (с ведущим нулем)
gПериод или эра

С ведущим нулем (например для часов и минут), означает что если значение будет меньше 10 (т.е. одноразрядным), то перед имеющимся разрядом будет добавлен ноль. Например, так: «05:01» (пять часов, одна минута). Без ведущих нулей мы бы получили следующее: «5:1» (те же пять часов и одна минута, но выглядит уже иначе).

А теперь пример…  Вот так можно вывести в консоль текущее время (часы в 24-х часовом формате с ведущим нулем, минуты с ведущим нулем) и дату (день месяца с ведущим нулем, полное название месяца и год в четырех цифрах):

Console.WriteLine(DateTime.Now.ToString("HH:mm dd MMMM yyyy"));