Полное руководство. С# 4.0 - Шилдт Герберт
Шрифт:
Интервал:
Закладка:
Помимо числовых значений, форматированию нередко подлежит и другой типданных: DateTime. Это структура, представляющая дату и время. Значения даты ивремени могут отображаться самыми разными способами. Ниже приведены лишь некоторые примеры их отображения.06/05/2005Friday, January 1, 201012:59:0012:59:00 PM
Кроме того, дата и время могут быть по-разному представлены в отдельных странах. Для этой цели в среде .NET Framework предусмотрена обширная подсистемаформатирования значений даты и времени.
Форматирование даты и времени осуществляется с помощью спецификаторовформата. Спецификаторы формата даты и времени сведены в табл. 22.7. Конкретноепредставление даты и времени может отличаться в силу региональных и языковых особенностей и поэтому зависит от настройки параметров культурной среды.
Таблица 22.7. Спецификаторы формата даты и времениСпецификаторФорматDДата в длинной формеdДата в краткой формеFДата и время в длинной формеfДата и время в краткой формеGДата — в краткой форме, время — в длиннойggДата и время — в краткой формемМесяц и деньmТо же, что и MOФормат даты и времени, включая часовой пояс. Строка, составленная в формате O, может быть преобразована обратно в эквивалентную форму вывода даты и времени. Это так называемый “круговой” форматoТо же, что и ORДата и время в стандартной форме по ГринвичуrТо же, что и RSСортируемый формат представления даты и времениТВремя в длинной формеtВремя в краткой формеUДлинная форма универсального представления даты и времени; время отображается как универсальное синхронизированное время (UTC)uКраткая форма универсального представления даты и времениYМесяц и годyТо же, что и Y
В приведенном ниже примере программы демонстрируется применение спецификаторов формата даты и времени.// Отформатировать дату и время, используя стандартные форматы.using System;class TimeAndDateFormatDemo { static void Main() { DateTime dt = DateTime.Now; // получить текущее время Console.WriteLine("Формат d: {0:d}", dt); Console.WriteLine("Формат D: {0:D}", dt); Console.WriteLine("Формат t: {0:t}", dt); Console.WriteLine("Формат T: {0:T}", dt); Console.WriteLine("Формат f: {0:f}", dt); Console.WriteLine("Формат F: {0:F}", dt); Console.WriteLine("Формат g: {0:g}", dt); Console.WriteLine("Формат G: {0:G}", dt); Console.WriteLine("Формат m: {0:m}", dt); Console.WriteLine("Формат M: {0:M}", dt); Console.WriteLine("Формат о: (0:o)", dt); Console.WriteLine("Формат O: (0:O}", dt); Console.WriteLine("Формат r: {0:r}", dt); Console.WriteLine("Формат R: {0:R}", dt); Console.WriteLine("Формат s: {0:s}", dt); Console.WriteLine("Формат u: {0:u}", dt); Console.WriteLine("Формат U: {0:U}", dt); Console.WriteLine("Формат у: {0:у}", dt); Console.WriteLine("Y format: {0:Y}", dt); }}
Эта программа дает следующий результат, который, впрочем, зависит от настроекязыковых и региональных параметров локализации базового программного обеспечения.Формат d: 2/11/2010Формат D: Thursday, February 11, 2010Формат t: 11:21 AMФормат T: 11:21:23 AMФормат f: Thursday, February 11, 2010 11:21 AMФормат F: Thursday, February 11, 2010 11:21:23 AMФормат g: 2/11/2010 11:21 AMФормат G: 2/11/2010 11:21:23 AMФормат m: February 11Формат M: February 11Формат о: 2010-02-11T11:21:23.3768153-06:00Формат О: 2010-02-11T11:21:23.3768153-06:00Формат r: Thu, 11 Feb 2010 11:21:23 GMTФормат R: Thu, 11 Feb 2010 11:21:23 GMTФормат s: 2010-02-11T11:21:23Формат u: 2010-02-11 11:21:23ZФормат U: Thursday, February 11, 2010 5:21:23 PMФормат у: February, 2010Формат Y: February, 2010
В следующем примере программы воспроизводятся очень простые часы. Время обновляется каждую секунду, и каждый час компьютер издает звонок. Для получения отформатированного строкового представления времени перед его выводом в этой программе используется метод ToString() из структуры DateTime. Через каждый чассимвол звукового предупреждающего сигнала присоединяется к отформатированнойстроке, представляющей время, в результате чего звенит звонок.// Пример простых часов.using System;class SimpleClock { static void Main() { string t; int seconds; DateTime dt = DateTime.Now; seconds = dt.Second; for(;;) { dt = DateTime.Now; // обновлять время через каждую секунду if (seconds != dt.Second) { seconds = dt.Second; t = dt.ToString("T"); if(dt.Minute==0 && dt.Second==0) t = t + "a"; // производить звонок через каждый час Console.WriteLine(t); } } }}Определение пользовательского формата даты и времени
Несмотря на то что стандартные спецификаторы формата даты и времени предусмотрены практически на все случаи жизни, пользователь может определить своисобственные специальные форматы. Процесс определения пользовательских форматов даты и времени мало чем отличается от описанного выше для числовых типов значений. По существу, пользователь создает пример (т.е. изображение) того, как должны выглядеть выводимые данные даты и времени. Для определения пользовательскогоформата даты и времени служат символы-заполнители, перечисленные в табл. 22.8.
Таблица 22.8. Символы-заполнители специального формата даты и времениСимвол-заполнительНазначениеdДень месяца в виде числа в пределах от 1 до 31ddДень месяца в виде числа в пределах от 1 до 31. Числовые значения в пределах от 1 до 9 дополняются начальным нулемdddСокращенное название дня неделиddddПолное название дня неделиf, ff, fff, ffff, fffff, ffffff, fffffffДробная часть числового значения, обозначающего секунды. Количество десятичных разрядов определяется числом заданных символов fgЭраhЧасы в виде числа в пределах от 1 до 12hhЧасы в виде числа в пределах от 1 до 12. Числовые значения в пределах от 1 до 9 дополняются начальным нулемHЧасы в виде числа в пределах от 0 до 23HHЧасы в виде числа в пределах от 0 до 23. Числовые значения в пределах от 1 до 9 дополняются начальным нулемКЧасовой пояс, указываемый в часах. Для автоматической коррекции местного времени и универсального синхронизированного времени (UTC) используется значение свойства DateTime.Kind. (Этот спецификатор формата рекомендуется теперь вместо спецификаторов с символамизаполнителями Z.)mМинутыmmМинуты. Числовые значения в пределах от 1 до 9 дополняются начальным нулемMМесяц в виде числа в пределах от 1 до 12MMМесяц в виде числа в пределах от 1 до 12. Числовые значенияв пределах от 1 до 9 дополняются начальным нулемМММСокращенное название месяцаMMMMПолное название месяцаsСекундыssСекунды. Числовые значения в пределах от 1 до 9 дополняются начальным нулемtСимвол "А” или “Р”, обозначающий время А.М. (до полудня) или P.M. (после полудня) соответственноttA.M. или P.M.УГод в виде двух цифр, если недостаточно однойУУГод в виде двух цифр. Числовые значения в пределах от 1 до 9 дополняются начальным нулемУУУГод в виде трех цифрУУУУГод в виде четырех цифрУУУУУГод в виде пяти цифрzСмещение часового пояса в часахzzСмещение часового пояса в часах. Числовые значения в пределах от 1 до 9 дополняются начальным нулемzzzСмещение часового пояса в часах и минутах:Разделитель для составляющих значения времени/Разделитель для составляющих значения даты%fmtСтандартный формат, соответствующий спецификатору формата fmt
Глядя на табл. 22.8, можно заметить, что символы-заполнители d, f, g, m, M, s и tвыполняют ту же функцию, что и аналогичные символы-заполнители из табл. 22.7.Вообще говоря, если один из этих символов указывается отдельно, то он интерпретируется как спецификатор формата. В противном случае он считается символом-заполнителем. Поэтому если требуется указать несколько таких символов отдельно,но интерпретировать их как символы-заполнители, то перед каждым из них следуетпоставить знак %.
В приведенном ниже примере программы демонстрируется применение нескольких форматов даты и времени.// Отформатировать дату и время, используя специальные форматы.using System;class CustomTimeAndDateFormatsDemo { static void Main() { DateTime dt = DateTime.Now; Console.WriteLine("Время: {0:hh:mm tt}", dt); Console.WriteLine("Время в 24-часовом формате: {0:HH:mm}", dt); Console.WriteLine("Дата: {0:ddd МММ dd, yyyy}", dt); Console.WriteLine("Эра: {0:gg}", dt); Console.WriteLine("Время в секундах: " + "{0:HH:mm:ss tt}", dt); Console.WriteLine("День месяца в формате m: {0:m}", dt); Console.WriteLine("Минуты в формате m: {0:%m}", dt); }}