Книга: C# 4.0: полное руководство

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

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

Помимо числовых значений, форматированию нередко подлежит и другой тип данных: DateTime. Это структура, представляющая дату и время. Значения даты и времени могут отображаться самыми разными способами. Ниже приведены лишь некоторые примеры их отображения.

06/05/2005
Friday, January 1, 2010
12:59:00
12:59:00 PM

Кроме того, дата и время могут быть по-разному представлены в отдельных странах. Для этой цели в среде .NET Framework предусмотрена обширная подсистема форматирования значений даты и времени.

Форматирование даты и времени осуществляется с помощью спецификаторов формата. Спецификаторы формата даты и времени сведены в табл.22.7. Конкретное представление даты и времени может отличаться в силу региональных и языковых особенностей и поэтому зависит от настройки параметров культурной среды.

Таблица 22.7. Спецификаторы формата даты и времени

Спецификатор

Формат

D

Дата в длинной форме

d

Дата в краткой форме

F

Дата и время в длинной форме

f

Дата и время в краткой форме

G

Дата — в краткой форме, время — в длинной

gg

Дата и время — в краткой форме

M

Месяц и день

m

То же, что и M

O

Формат даты и времени, включая часовой пояс. Строка, составленная в формате O, может быть преобразована обратно в эквивалентную форму вывода даты и времени. Это так называемый “круговой” формат

о

То же, что и о

R

Дата и время в стандартной форме по Гринвичу

г

То же, что и R

Сортируемый формат представления даты и времени

T

Время в длинной форме

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:y}", 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

В следующем примере программы воспроизводятся очень простые часы. Время обновляется каждую секунду, и каждый час компьютер издает звонок. Для получения отформатированного строкового представления времени перед его выводом в этой программе используется метод ToStringO из структуры 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 до 31

dd

День месяца в виде числа в пределах от 1 до 31. Числовые значения в пределах от 1 до 9 дополняются начальным нулем

ddd

Сокращенное название дня недели

dddd

Полное название дня недели

f, ff, fff, ffff, fffff, ffffff, fffffff

Дробная часть числового значения, обозначающего секунды. Количество десятичных разрядов определяется числом заданных символов f

g

Эра

h

Часы в виде числа в пределах от 1 до 12

hh

Часы в виде числа в пределах от 1 до 12. Числовые значения в пределах от 1 до 9 дополняются начальным нулем

H

Часы в виде числа в пределах от 0 до 23

HH

Часы в виде числа в пределах от 0 до 23. Числовые значения в пределах от 1 до 9 дополняются начальным нулем

К

Часовой пояс, указываемый в часах. Для автоматической коррекции местного времени и универсального синхронизированного времени (UTC) используется значение свойства DateTime.Kind. (Этот спецификатор формата рекомендуется теперь вместо спецификаторов с символами-заполнителями Z.)

m

Минуты

mm

Минуты. Числовые значения в пределах от 1 до 9 дополняются начальным нулем

M

Месяц в виде числа в пределах от 1 до 12

MM

Месяц в виде числа в пределах от 1 до 12. Числовые значения в пределах от 1 до 9 дополняются начальным нулем

МММ

Сокращенное название месяца

MMMM

Полное название месяца

Секунды

Секунды. Числовые значения в пределах от 1 до 9 дополняются начальным нулем

t

Символ “А” или “Р”, обозначающий время А.М. (до полудня) или P.M. (после полудня) соответственно

tt

A.M. или P.M.

У

Год в виде двух цифр, если недостаточно одной

УУ

Год в виде двух цифр. Числовые значения в пределах от 1 до 9 дополняются начальным нулем

УУУ

Год в виде трех цифр

УУУУ

Год в виде четырех цифр

УУУУУ

Год в виде пяти цифр

z

Смещение часового пояса в часах

zz

Смещение часового пояса в часах. Числовые значения в пределах от 1 до 9 дополняются начальным нулем

zzz

Смещение часового пояса в часах и минутах

:

Разделитель для составляющих значения времени

/

Разделитель для составляющих значения даты

%fmt

Стандартный формат, соответствующий спецификатору формата fmt

Глядя на табл.22.8, можно заметить, что символы-заполнители d, f, g, 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);
  }
}

Вот к какому результату приводит выполнение этой программы (опять же все зависит от конкретных настроек языковых и региональных параметров локализации базового программного обеспечения).

Время: 11:19 AM
Время 24-часовом формате: 11:19
Дата: Thu Feb 11, 2010
Эра: A.D.
Время в секундах: 11:19:40 AM
День месяца в формате m: February 11
Минуты в формате m: 19

Оглавление книги


Генерация: 0.051. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз