Из этого руководства вы узнаете:

  1. Что такое String.Format?

  2. Как использовать String.Format?

  3. Форматирование валюты

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

  5. Форматирование Decimal, Double, Float и Int 

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

Программа для демонстрации

Для того, чтобы вы поняли, как работает String.Format, я написал для этой статьи небольшую демонстрационную программу. В ней я беру десятичное значение, и конвертирую его в валюту. Значок валюты будет отображаться в соответствии с настройками вашего региона.

Пример

using System;
 
namespace StringFormat_Example
{
    public class Program
    {
        public static void Main(string[] args)
        {
            decimal coin=17.36m;
            Console.WriteLine(String.Format("{0:C}",coin));
        }
    }
}

Вывод

₹ 17.36

Это просто небольшая демонстрационная программа, и в ней пока не виден широкий спектр возможностей форматирования String.Format. В этой статье я попытался охватить все виды форматирования для того, чтобы вы могли изучить всю тему, прочитав всего одну статью.

В этой главе вы изучите:

String.Format - Currency

String.Format - DateTime

String.Format – Double, Decimal, Float или Int

STRING.FORMAT ДЛЯ ПРЕОБРАЗОВАНИЯ ВАЛЮТЫ

В большинстве случаев вам нужно отображать в виде валюты значения типа int, double или number. Для осуществления этого нам не нужно писать десятки строк кода. Просто кастомизируйте вывод как вам нужно и позвольте String.Format сделать за вас всю работу.

Формат

Описание

{0:C}

Отображает фактическое значение в валюте.

{0:C4}

Отображает фактическое значение с точностью до 4 цифр после запятой.

{0:C6}

Отображает фактическое значение с точностью до 6 цифр после запятой.

Пример

using System;
 
namespace StringFormat_Currency
{
    public class Program
    {
        public static void Main(string[] args)
        {
            decimal dcoin=2398.87m;
            int icoin=2309;
            float fcoin=9283.65f;
            Console.WriteLine(String.Format("Convert Decimal {0:C}",dcoin));
            Console.WriteLine(String.Format("Convert Decimal {0:C4}",icoin));
            Console.WriteLine(String.Format("Convert Decimal {0:C6}",fcoin));
        }
    }
}

Вывод

Convert Decimal ₹ 2,398.87

Convert Decimal ₹ 2,309.0000

Convert Decimal ₹ 9,283.650000

STRING.FORMAT ДЛЯ ПРЕОБРАЗОВАНИЯ DATETIME

String.Format широко используется для преобразований даты и времени. Простенькая DateTime-программа не даст вам отформатированного вывода. String.Format в C# помогает отображать DateTime в соответствии с вашими потребностями. Для DateTime можно применить следующие форматы.

Формат

Описание

{0:yy}

Отображает год в виде двух цифр

{0:yyyy}

Отображает год в четырехзначном формате

{0:MM}

Отображает месяц. Для обозначения месяца используется латинская заглавная буква «М», так как маленькая буква m означает минуты.

{0:dd}

Отображает день даты

{0:dd-MM-yyyy}

Отображает дату в формате dd-MM-YYYY

{0:hh:mm:ss}

Отображает время в формате hh:mm:ss

{0:zz}

Отображает текущий часовой пояс

Всегда помните при форматировании даты:

y - год

M - месяц

d - день

h - час

m - минута

s - секунда

f - миллисекунда

z - часовой пояс

Пример

using System;
 
namespace StringFormat_DateTime
{
    public class Program
    {
        public static void Main(string[] args)
        {
            DateTime dt=DateTime.Now;            
 
            //Start Formation
            Console.WriteLine(String.Format("Original Value :- {0}",dt));
            Console.WriteLine(String.Format("Display Year in 2 Digits :- {0:yy}",dt));
            Console.WriteLine(String.Format("Display Year in 4 Digits :- {0:yyyy}",dt));
            //Use Capital M for month. Small m displays minutes
            Console.WriteLine(String.Format("Display Year and Months :- {0:yyyy MM}",dt));
            Console.WriteLine(String.Format("Display date, month and  Year :- {0:dd MM yyyy}",dt));
            Console.WriteLine(String.Format("Display Time :- {0:hh:mm:ss}",dt));
           Console.WriteLine(String.Format("My Time Zone is :- {0:zz}",dt));
        }
    }
}

Вывод

Original Value :- 17/02/17 9:56:00 AM
Display Year in 2 Digits :- 17
Display Year in 4 Digits :- 2017
Display Year and Months :- 2017 02
Display date, month and Year :- 17 02 2017
Display Time :- 09:56:00
My Time Zone is :- +05
_

DATETIMEFORMATINFO

В DateTimeFormatInfo есть несколько определенных стандартов, которые помогут вам настроить дату и время самым простым способом. Вот список Определенных стандартов (Defined Standard) присущих культуре en-us.

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

Свойство

Паттерн (для культуры en-us)

t

ShortTimePattern

h:mm tt

d

ShortDatePattern

M/d/yyyy

T

LongTimePattern

h:mm:ss tt

D

LongDatePattern

dddd, MMMM dd, yyyy

f

(комбинация D и t)

dddd, MMMM dd, yyyy h:mm tt

F

FullDateTimePattern

dddd, MMMM dd, yyyy h:mm:ss tt

g

(комбинация d и t)

M/d/yyyy h:mm tt

G

(комбинация d и T)

M/d/yyyy h:mm:ss tt

m,M

MonthDayPattern

MMMM dd

y, Y

YearMonthPattern

MMMM, yyyy

r, R

RFC1123Pattern

ddd, dd MMM yyyy HH':'mm':'ss 'GMT' ()

s

SortableDateTi­mePattern

yyyy'-'MM'-'dd'T'HH':'mm':'ss ()

u

UniversalSorta­bleDateTimePat­tern

yyyy'-'MM'-'dd HH':'mm':'ss'Z' (*)

Пример

using System;
 
namespace StringFormat_DateTimeFormatInfo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            DateTime dt=DateTime.Now;            
 
            //Start Formation
            Console.WriteLine(String.Format("Short Time Pattern [t] : {0:t}",dt));
            Console.WriteLine(String.Format("Short Date Pattern [d] : {0:d}",dt));
            Console.WriteLine(String.Format("Long Time Pattern [T] : {0:T}",dt));
            Console.WriteLine(String.Format("Long Date Pattern [D] : {0:D}",dt));
            Console.WriteLine(String.Format("Combination of D and T [f] : {0:f}",dt));
            Console.WriteLine(String.Format("Full Date Time Pattern [F] : {0:F}",dt));
            Console.WriteLine(String.Format("Combination of d and t [g] : {0:g}",dt));
            Console.WriteLine(String.Format("Combination of d and T [G] : {0:G}",dt));
            Console.WriteLine(String.Format("Month Day Pattern [m or M] : {0:M}",dt));            
            Console.WriteLine(String.Format("Year Month Pattern [y or Y] : {0:Y}",dt));
            Console.WriteLine(String.Format("RFC1123Pattern [r or R] : {0:R}",dt));
            Console.WriteLine(String.Format("SortableDateTi­mePattern [s] : {0:s}",dt));
            Console.WriteLine(String.Format("UniversalSorta­bleDateTimePat­tern [u] : {0:u}",dt));
        }
    }
}

Вывод

Short Time Pattern [t] : 9:53 AM
Short Date Pattern [d] : 17/02/17
Long Time Pattern [T] : 9:53:09 AM
Long Date Pattern [D] : Friday 17 February 2017
Combination of D and T [f] : Friday 17 February 2017 9:53 AM
Full Date Time Pattern [F] : Friday 17 February 2017 9:53:09 AM
Combination of d and t [g] : 17/02/17 9:53 AM
Combination of d and T [G] : 17/02/17 9:53:09 AM
Month Day Pattern [m or M] : 17 February
Year Month Pattern [y or Y] : February 2017
RFC1123Pattern [r or R] : Fri, 17 Feb 2017 09:53:09 GMT
SortableDateTi­mePattern [s] : 2017-02-17T09:53:09
UniversalSorta­bleDateTimePat­tern [u] : 2017-02-17 09:53:09Z
_

STRING.FORMAT ДЛЯ DOUBLE, DECIMAL, FLOAT ИЛИ INT

Иногда нам нужно кастомизировать вывод для значений типа Double, Decimal или Float. Иногда вывод для этих типов данных слишком длинный (мы говорим о дробной части), и вам просто нужно обрезать часть значения, оставшуюся за пределами определенной точности. String.Format поможет вам настроить значения типа Double, Decimal или Float.

Таблица Форматов

Формат

Объяснение

Значение

Вывод

{0}

Исходное значение

83745.892

83745.892

{0:0.00}

Два десятичных знака после точки

83745.892

83745.89

{0:0.##}

Максимум два десятичных знака после точки

83745.892

83745.89

{0:00.00}

Две цифры перед десятичной точкой

5.892

05.892

{0:0,0.00}

Разделитель тысяч

83745.892

83,745.89

{0:0.0}

Преобразование дробных чисел к виду с нулем

0.5

0.5

{0:#.0}

Преобразование дробных чисел к виду без нуля

0.5

.5

{0,10:0.0}

Выравнивание числа по пробелам

120.5

“ 120.5”

{0,10:0.0}

Выравнивание числа по пробелам

120.5

“120.5 Hello”

{0:###-##-####}

Формат номера телефона

123456789

123-45-6789

Пример

using System;
 
namespace StringFormat_Double
{
    public class Program
    {
        public static void Main(string[] args)
        {
            //Start Formation
            Console.WriteLine("Current Output : {0}", 83745.892);
            Console.WriteLine(string.Format("Two decimal places : {0:0.00}",83745.892));
            Console.WriteLine(string.Format("Three decimal places : {0:0.000}",83745.82));
            Console.WriteLine(string.Format("Maximum Two decimal places : {0:0.##}",83745.892));
            Console.WriteLine(string.Format("Two digits before decimal point : {0:00.00}",5.892));
            Console.WriteLine(string.Format("Thousands Separator : {0:0,0.00}",83745.892));
            Console.WriteLine(string.Format("Point number conversion with zero : {0:0.0}",0.5));
            Console.WriteLine(string.Format("Point number conversion without zero : {0:#.0}",0.5));
            Console.WriteLine(string.Format("Align Number with Spaces : {0,10:0.0}",120.5));
            Console.WriteLine(string.Format("Align Number with Spaces : {0,-10:0.0} Hello",120.5));
           Console.WriteLine(string.Format("Phone Number format {0:###-##-####}",123456789));
        }
    }
}

Вывод

Current Output : 83745.892
Two decimal places : 83745.89
Three decimal places : 83745.820
Maximum Two decimal places : 83745.89
Two digits before decimal point : 05.89
Thousands Separator : 83,745.89
Point number conversion with zero : 0.5
Point number conversion without zero : .5
Align Number with Spaces : 120.5
Align Number with Spaces : 120.5 Hello
Phone Number format 123-45-6789
_

Заключение

В этом руководстве я попытался максимально раскрыть String.Format с помощью соответствующих примеров программирования. Для каждого программиста очень важно знать, как использовать String.Format. Это делает пользовательский опыт более реалистичным и ценным.


Материал подготовлен в рамках специализации «C# Developer».

Всех желающих приглашаем на demo-занятие «Коллекции и структуры данных». На вебинаре мы рассмотрим основные универсальные коллекции .NET (Array, List, Dictionary, Queue, Stack, Hashtable и другие более специфичные), обсудим их назначение, реализацию, методы, производительность, а также как делать выбор в пользу той или иной структуры. >> РЕГИСТРАЦИЯ

Комментарии (3)