Шаг 179.
Microsoft Visual C++ 2010. Язык С/С++.
Компоненты Windows Forms. Стандартное и пользовательское форматирование

    На этом шаге мы рассмотрим использование различных видов форматирования.

    Стандартное форматирование состоит в применении набора символов форматирования, представленных в таблице 1. Если задано стандартное форматирование даты, а символа форматирования нет в таблице, которая хранится в соответствующем классе, то система выдаст ошибку. Вид результата форматирования (т. е. строка после форматирования) зависит от Региональных установок вашего компьютера, задаваемых через панель управления. Компьютеры с различными Региональными установками будут, естественно, выдавать разные результаты форматирования.

Таблица 1. Символы форматирования
Форматный символ Описание
d Так задают день месяца. Число, состоящее из одной цифры, не будет иметь впереди нуля
dd Так задают день месяца, но в этом случае число, состоящее из одной цифры, будет иметь впереди ноль
ddd При таком форматировании станут выдаваться не названия дней недели, а их аббревиатуры
dddd При таком форматировании станут выдаваться полные названия дней недели
M Месяц будет выдаваться в виде числа. Месяц, представленный одной цифрой, не будет иметь впереди нуля
MM Месяц будет выдаваться в виде числа. Месяц, представленный одной цифрой, будет иметь впереди ноль
МММ При таком форматировании станут выдаваться не названия месяцев, а их аббревиатуры
МММM При таком форматировании будет выдаваться полное название месяца
y При таком форматировании будет выдаваться год, но без выдачи века. Если год представляется одной цифрой (например, 7-й год), то перед ним нуля не будет
yy При таком форматировании будет выдаваться год, но без выдачи века. Если год представляется одной цифрой, то в выводе перед ним появится ноль
yyyy При таком форматировании будет выдаваться год из четырех цифр, включая век
h При таком форматировании выводится время в 12-часовом формате. Одноразрядное значение времени не будет иметь впереди нуля
hh Такой же смысл, что и для h, но с нулем впереди числа
H При таком форматировании выводится время в 24-часовом формате. Одноразрядное значение времени не будет иметь впереди нуля
HH Такой же смысл, что и для Н, но с нулем впереди числа
m Так выводятся минуты. Одноразрядное значение не будет иметь впереди нуля
mm Такой же смысл, что и для m, но с нулем впереди числа
s Так выводятся секунды. Одноразрядное значение не будет иметь впереди нуля
ss Такой же смысл, что и для s, но с нулем впереди числа
f Так выводятся доли секунды. Если секунда - это одноразрядное число, то лишние цифры отсекаются
ff Так выводятся доли секунды. Если секунда - это двухразрядное число, то лишние цифры отсекаются
\c Здесь "с" - это любой символ. Чтобы вывести обратную косую черту (бэкслэш), надо использовать символы "\\"


   Примечание. В таблице опущены некоторые специфические форматы.

    Пример форматирования дат приведен в приложении, форма которого в режиме дизайна приведена на рисунке 1, в режиме исполнения - на рисунке 2, а текст обработчиков - в примере ниже.


Рис.1. Форма приложения в режиме дизайна


Рис.2. Форма приложения в режиме выполнения

    Текст обработчиков:

// Кнопка "Выход"
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
	 Close();
}
// Кнопка "Форматировать дату"
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
	 DateTime^ dt = DateTime(); 
	 String^ s;

	 //объявлен массив строк с именем format и инициализирован форматами
	 array <String^>^ format = {"d/M/y", "dd/MM/yy", "dd/MM/yyyy", 
		 "d MMM yyyy \'г\', ddd", "d MMMM yyyy \'г\', dddd",
		 "dd/MM/yy HH::mm", "ddd, MMM d \"'\"yy"};
	 dt = dateTimePicker1->Value; //здесь будет выбранная дата 
	 for ( int i = 0; i < format->Length; i++ )
	 {
		 //CurrentInfo - учет национальных особенностей 
		 // (см. Региональные установки на панели управления)
		 s = dt->ToString( format[ i ], DateTimeFormatInfo::CurrentInfo ); 
		 //перевод даты в строку с одновременным форматированием
		 listBox1->Items->Add(format[ i ]); 
		 listBox2->Items->Add(s); 
	 } 
}
Архив проекта можно взять здесь.

    Если нужны региональные настройки, то в перечень используемых пространств h-файла надо добавить строку:

  using namespace System::Globalization;  //для даты

    На следующем шаге мы приведем некоторые сведения о работе с датами.




Предыдущий шаг Содержание Следующий шаг