В данной обзорной статье вашему вниманию будет предоставлены примеры форматирования дат и времени (DateTime), используя метод String.Format языка программирования c#. Будут рассмотрены как пользовательское, так и стандартное форматирование. Если коротко, то пользовательское форматирование — это когда в строке содержится более одного символа, включая пробелы. Остальное является стандартным форматирование. Не пугайтесь, далее на примерах вы поймете, где какой тип форматирования.
Пользовательское форматирование даты и времени (DateTime)
Рассмотрим следующие пользовательские спецификаторы формата:
-
y — год
-
M — месяц
-
d — день
-
h — часы от 1 до 12 (12—часовой формат)
-
H — часы от 0 до 23 (24—часовой формат)
-
m — минуты
-
s — секунды
-
f — доли секунды
-
F — доли секунды(завершающие нули не отображаются)
-
t — до полудня / после полудня (P.M. / A.M.)
-
z — тайм зона
Примеры использования:
-
//создадим дату 2012-01-18 22:13:11.059
-
DateTime myDate =new DateTime(2012, 1, 18, 22, 13, 11, 059);
-
-
String.Format(«{0:y yy yyy yyyy}», myDate); // «12 12 2012 2012» год
-
String.Format(«{0:M MM MMM MMMM}», myDate); // «1 01 янв Январь» месяц
-
String.Format(«{0:d dd ddd dddd}», myDate); // «18 18 Ср среда» день
-
String.Format(«{0:h hh H HH}», myDate); // «10 10 22 22» часы 12\24
-
String.Format(«{0:m mm}», myDate); // «13 13» минуты
-
String.Format(«{0:s ss}», myDate); // «11 11» секунды
-
String.Format(«{0:f ff fff ffff}», myDate); // «0 05 059 0590» доли секунды
-
String.Format(«{0:F FF FFF FFFF}», myDate); // «05 059 059» без нулей
-
String.Format(«{0:t tt}», myDate); // «P PM» до\после полудня
-
String.Format(«{0:z zz zzz}», myDate); // «+3 +03 +03:00» тайм зона
Так же можно использовать разделители для даты ( / ) и времени ( : ). Эти разделители будут отличаться в зависимости от текущего языка и региональных настроек вашей операционной системы.Они заданы в DateTimeFormatInfo.DateSeparator (для даты) и в DateTimeFormatInfo.TimeSeparator (для времени). Посмотрим на следующий кусок кода:
-
Console.WriteLine( String.Format(CultureInfo.CreateSpecificCulture(«ru-RU»),«{0:d/M/yyyy HH:mm:ss}», myDate) );
-
Console.WriteLine( String.Format(CultureInfo.CreateSpecificCulture(«en-US»), «{0:d/M/yyyy HH:mm:ss}», myDate) );
-
-
Console.ReadKey();
Для первой строки, где указан русский язык, будет выведено:
-
// 18.1.2012 22:13:11
Для второй (английский язык) — мы увидим:
-
// 18/1/2012 22:13:11
Рассмотрим примеры пользовательского форматирования даты и времени(DateTime):
-
using System.Globalization;
-
//….
-
DateTime myDate = new DateTime(2010, 1, 5, 7, 8, 9, 059);
-
-
// цифры месяца\дня с\без начального нуля
-
Console.WriteLine(String.Format(«{0:M/d/yyyy}», myDate)); //1.5.2010
-
Console.WriteLine(String.Format(«{0:MM/dd/yyyy}», myDate)); //01.05.2010
-
-
// 2 или 4 цифры для года
-
Console.WriteLine(String.Format(«{0:MM/dd/yy}», myDate)); //01.05.10
-
Console.WriteLine(String.Format(«{0:MM/dd/yyyy}», myDate)); //01.05.2010
-
-
// день\месяц символами
-
Console.WriteLine(String.Format(«{0:ddd, MMM d, yyyy}», myDate)); //Вт, янв 5, 2010
-
Console.WriteLine(String.Format(«{0:dddd, MMMM d, yyyy}»,myDate)); //вторник, января 5, 2010
-
-
Console.ReadKey();
Стандартное DateTime форматирование
В классе DateTimeFormatInfo определены стандартные шаблоны для различных языков и их региональных настроек. Получить доступ к нему для определенной культуры (CultureInfo) можно например так:
-
DateTimeFormatInfo fInfo2 = CultureInfo.CurrentCulture.DateTimeFormat;
-
DateTimeFormatInfo fInfo1 = CultureInfo.InvariantCulture.DateTimeFormat;
К примеру свойство ShortTimePattern данного класса — это строка, содержащая в себе значения h:mm tt для en-US и HH:mm для de-DE культуры.
Рассмотрим таблицу, демонстрирующию различные шаблоны в DateTimeFormatInfo и их значения для en-US культуры. Первый столбец описывает спецификаторы формата для String.Format метода, второй — свойство класса DateTimeFormatInfo, третий — значение шаблона для культуры en-US:
Следующий пример демонстрирует стандартные спецификаторы формата в методе String.Format и результирующие строки:
-
DateTime myDate = new DateTime(2010, 1, 5, 7, 8, 9, 059);
-
-
String.Format(«{0:t}», myDate); // «7:08 AM» ShortTime
-
String.Format(«{0:d}», myDate); // «05.01.2010» ShortDate
-
String.Format(«{0:T}», myDate); // «7:08:09 AM» LongTime
-
String.Format(«{0:D}», myDate); // «5 января 2010 г.» LongDate
-
String.Format(«{0:f}», myDate); // «5 января 2010 г. 7:08 AM» LongDate+ShortTime
-
String.Format(«{0:F}», myDate); // «5 января 2010 г. 7:08:09 AM» FullDateTime
-
String.Format(«{0:g}», myDate); // «05.01.2010 7:08 AM» ShortDate+ShortTime
-
String.Format(«{0:G}», myDate); // «05.01.2010 7:08:09 AM» ShortDate+LongTime
-
String.Format(«{0:m}», myDate); // «января 05» MonthDay
-
String.Format(«{0:y}», myDate); // «Январь 2010» YearMonth
-
String.Format(«{0:r}», myDate); // «Tue, 05 Jan 2010 07:08:09 GMT» RFC1123
-
String.Format(«{0:s}», myDate); // «2010-01-05T07:08:09» SortableDateTime
-
String.Format(«{0:u}», myDate); //»2010-01-05 07:08:09Z» UniversalSortableDateTime