String.Format в C# — все, что вам нужно знать

Kate

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

  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)
tShortTimePatternh:mm tt
dShortDatePatternM/d/yyyy
TLongTimePatternh:mm:ss tt
DLongDatePatterndddd, MMMM dd, yyyy
f(комбинация D и t)dddd, MMMM dd, yyyy h:mm tt
FFullDateTimePatterndddd, 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,MMonthDayPatternMMMM dd
y, YYearMonthPatternMMMM, yyyy
r, RRFC1123Patternddd, dd MMM yyyy HH':'mm':'ss 'GMT' ()
sSortableDateTimePatternyyyy'-'MM'-'dd'T'HH':'mm':'ss ()
uUniversalSortableDateTimePatternyyyy'-'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("SortableDateTimePattern : {0:s}",dt));
Console.WriteLine(String.Format("UniversalSortableDateTimePattern : {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
SortableDateTimePattern : 2017-02-17T09:53:09
UniversalSortableDateTimePattern : 2017-02-17 09:53:09Z
_

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

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

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

ФорматОбъяснениеЗначениеВывод
{0}Исходное значение83745.89283745.892
{0:0.00}Два десятичных знака после точки83745.89283745.89
{0:0.##}Максимум два десятичных знака после точки83745.89283745.89
{0:00.00}Две цифры перед десятичной точкой5.89205.892
{0:0,0.00}Разделитель тысяч83745.89283,745.89
{0:0.0}Преобразование дробных чисел к виду с нулем0.50.5
{0:#.0}Преобразование дробных чисел к виду без нуля0.5.5
{0,10:0.0}Выравнивание числа по пробелам120.5“ 120.5”
{0,10:0.0}Выравнивание числа по пробелам120.5“120.5 Hello”
{0:###-##-####}Формат номера телефона123456789123-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. Это делает пользовательский опыт более реалистичным и ценным.

 
Сверху