String.Format格式说明

1.

C# String.Format格式化输出

 

    在我们一期和转换课程的学习中,我们会经常用到字符串的格式化输出。在此做如下这个总结,以下N多种格式化方式,同学们记住常用的就可以了,不常用的随用随查吧。

          string s1 = 12345.ToString("n"); //生成12,345.00

            string s2 = 12345.ToString("C");//生成 ¥12,345.00

            string s3 = 12345.ToString("e");//生成 1.234500e+004

            string s4 = 12345.ToString("f4");//生成 12345.0000

            string s5 = 12345.ToString("x");//生成 3039 (16进制)

            string s6 = 612345.ToString("p");//生成 1,234,500.00%

            string s7 = String.Format("{0:(###) ###-####}", 8005551212);

//生成(1800)555-1212

            int a = 12345678;

            double b = 1234.12543;

 

            string s8= String.Format("abcd{0:C}abcd", b);//abcd¥1,234.13abcd

            strings9 = "abcd" + b.ToString("C") + "abcd";//abcd¥1,234.13abcd

          string s10 = String.Format("{0:C3}",b);//¥1,234.125

            string s11 = b.ToString("C3");//¥1,234.125

            string s12 = String.Format("{0:d}", a);//十进制--12345678

            string s13 = b.ToString("d");//十进制--相同的类型,转换报错

            strings14 = String.Format("{0:e}",a);//指数--1.234568e+007

            string s15 = b.ToString("e");//指数--1.234125e+003

            string s16 = String.Format("{0:f}", a);//定点数--12345678.00

            string s17 = b.ToString("f");//定点数--1234.13

            strings18 = String.Format("{0:n}",a);//数值--12,345,678.00

            string s19 = b.ToString("n");//数值--1,234.13

            string s20 = String.Format("{0:x}", a);//十六进制--bc614e

            string s21 = b.ToString("x");//16--带有小数不能转换,出错

            string s22= String.Format("{0:g}",a);//通用为最紧凑--12345678

            strings23 = b.ToString("g");//通用为最紧凑--1234.12543

 

          b = 4321.12543;

            a = 1234;

            string s24 = String.Format("{0:000000}", a);// 001234

            string s25 = String.Format("{0:000000}", b);// 004321

            //# 描述:占位符,如果可能,填充位

            string s26 = String.Format("{0:#######}", a);// 1234

            string s27 = String.Format("{0:#######}", b);// 4321

            string s28 = String.Format("{0:#0####}", a);// 01234

            string s29 = String.Format("{0:0#0000}", b);// 004321

            //. 描述:小数点

            string s30 = String.Format("{0:000.000}", a);//1234.000

            strings31 = String.Format("{0:000.000}",b);//4321.125

 

b = 87654321.12543;

            a =12345678;

            //, 描述:数字分组,也用于增倍器

            string s32 = String.Format("{0:0,00}", a);//12,345,678

            string s33 = String.Format("{0:0,00}", b);//87,654,321

            string s34 = String.Format("{0:0,}", a);//12346

            string s35 = String.Format("{0:0,}", b);//87654

            string s36 = String.Format("{0:0,,}", a);//12

            string s37 = String.Format("{0:0,,}", b);//88

            string s38 = String.Format("{0:0,,,}", a);//0

            strings39 = String.Format("{0:0,,,}",b);// 0  

//   % 描述:格式为百分数

           string s40 = String.Format("{0:0%}",a);// 1234567800%

            string s41 = String.Format("{0:#%}", b);//8765432113%

            string s42 = String.Format("{0:0.00%}", a);//1234567800.00%

            strings43 = String.Format("{0:#.00%}",b);// 8765432112.54%

  格式 原始数据 结 果

  "{0:P}"0.40 40%

  数字 {0:N2} 12.36

  数字 {0:N0} 13

  货币 {0:c2} $12.36

  货币 {0:c4} $12.3656

  货币 "¥{0:N2}" ¥12.36

  科学计数法 {0:E3} 1.23E+001

  百分数 {0:P} 12.25% P and ppresent the same.

  日期 {0:D} 2006年11月25日

  日期 {0:d} 2006-11-25

  日期 {0:f} 2006年11月25日10:30

  日期 {0:F} 2006年11月25日10:30:00

  日期 {0:s} 2006-11-2610:30:00

时间{0:T} 10:30:00

 

DateTime dt = DateTime.Now;

  Label1.Text =dt.ToString();//2005-11-5 13:21:25

  Label2.Text =dt.ToFileTime().ToString();//127756416859912816

  Label3.Text =dt.ToFileTimeUtc().ToString();//127756704859912816

  Label4.Text =dt.ToLocalTime().ToString();//2005-11-5 21:21:25

  Label5.Text =dt.ToLongDateString().ToString();//2005年11月5日

  Label6.Text =dt.ToLongTimeString().ToString();//13:21:25

  Label7.Text =dt.ToOADate().ToString();//38661.5565508218

  Label8.Text =dt.ToShortDateString().ToString();//2005-11-5

  Label9.Text =dt.ToShortTimeString().ToString();//13:21

  Label10.Text =dt.ToUniversalTime().ToString();//2005-11-5 5:21:25

  Label1.Text =dt.Year.ToString();//2005

  Label2.Text =dt.Date.ToString();//2005-11-5 0:00:00

  Label3.Text =dt.DayOfWeek.ToString();//Saturday

  Label4.Text =dt.DayOfYear.ToString();//309

  Label5.Text =dt.Hour.ToString();//13

  Label6.Text =dt.Millisecond.ToString();//441

  Label7.Text =dt.Minute.ToString();//30

  Label8.Text =dt.Month.ToString();//11

  Label9.Text =dt.Second.ToString();//28

  Label10.Text =dt.Ticks.ToString();//632667942284412864

  Label11.Text = dt.TimeOfDay.ToString();//13:30:28.4412864

  Label1.Text =dt.ToString();//2005-11-5 13:47:04

  Label2.Text =dt.AddYears(1).ToString();//2006-11-5 13:47:04

  Label3.Text =dt.AddDays(1.1).ToString();//2005-11-6 16:11:04

  Label4.Text =dt.AddHours(1.1).ToString();//2005-11-5 14:53:04

  Label5.Text =dt.AddMilliseconds(1.1).ToString();//2005-11-5 13:47:04

  Label6.Text =dt.AddMonths(1).ToString();//2005-12-5 13:47:04

  Label7.Text =dt.AddSeconds(1.1).ToString();//2005-11-5 13:47:05

  Label8.Text = dt.AddMinutes(1.1).ToString();//2005-11-513:48:10

  Label9.Text =dt.AddTicks(1000).ToString();//2005-11-5 13:47:04

  Label10.Text =dt.CompareTo(dt).ToString();//0

  Label11.Text =dt.Add(?).ToString();//问号为一个时间段

  Label1.Text =dt.Equals("2005-11-6 16:11:04").ToString();//False

  Label2.Text =dt.Equals(dt).ToString();//True

  Label3.Text =dt.GetHashCode().ToString();//1474088234

  Label4.Text =dt.GetType().ToString();//System.DateTime

  Label5.Text =dt.GetTypeCode().ToString();//DateTime

  Label1.Text = dt.GetDateTimeFormats('s')[0].ToString();//2005-11-05T14:06:25

  Label2.Text =dt.GetDateTimeFormats('t')[0].ToString();//14:06

  Label3.Text =dt.GetDateTimeFormats('y')[0].ToString();//2005年11月

  Label4.Text =dt.GetDateTimeFormats('D')[0].ToString();//2005年11月5日

  Label5.Text =dt.GetDateTimeFormats('D')[1].ToString();//2005 11 05

  Label6.Text =dt.GetDateTimeFormats('D')[2].ToString();//星期六2005 11 05

  Label7.Text =dt.GetDateTimeFormats('D')[3].ToString();//星期六2005年11月5日

  Label8.Text =dt.GetDateTimeFormats('M')[0].ToString();//11月5日

  Label9.Text =dt.GetDateTimeFormats('f')[0].ToString();//2005年11月5日 14:06

  Label10.Text =dt.GetDateTimeFormats('g')[0].ToString();//2005-11-5 14:06

  Label11.Text =dt.GetDateTimeFormats('r')[0].ToString();//Sat, 05 Nov 2005 14:06:25 GMT

  Label1.Text =String.Format("{0:d}",dt);//2005-11-5

  Label2.Text =String.Format("{0:D}",dt);//2005年11月5日

  Label3.Text =String.Format("{0:f}",dt);//2005年11月5日 14:23

  Label4.Text =String.Format("{0:F}",dt);//2005年11月5日 14:23:23

  Label5.Text =String.Format("{0:g}",dt);//2005-11-5 14:23

  Label6.Text =String.Format("{0:G}",dt);//2005-11-5 14:23:23

  Label7.Text =String.Format("{0:M}",dt);//11月5日

  Label8.Text =String.Format("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMT

  Label9.Text =String.Format("{0:s}",dt);//2005-11-05T14:23:23

  Label10.Text   String.Format("{0:t}",dt);//14:23

  Label11.Text =String.Format("{0:T}",dt);//14:23:23

  Label12.Text =String.Format("{0:u}",dt);//2005-11-05 14:23:23Z

  Label13.Text =String.Format("{0:U}",dt);//2005年11月5日 6:23:23

  Label14.Text =String.Format("{0:Y}",dt);//2005年11月

  Label15.Text =String.Format("{0}",dt);//2005-11-5 14:23:23

  Label16.Text =String.Format("{0:yyyyMMddHHmmssffff}",dt);

  stringstr1=String.Format("{0:N1}",56789);                //result: 56,789.0

  stringstr2=String.Format("{0:N2}",56789);                //result: 56,789.00

  stringstr3=String.Format("{0:N3}",56789);                //result: 56,789.000

  stringstr8=String.Format("{0:F1}",56789);                //result: 56789.0

  stringstr9=String.Format("{0:F2}",56789);                //result: 56789.00

  stringstr11=(56789 / 100.0).ToString("#.##");            //result: 567.89

  stringstr12=(56789 / 100).ToString("#.##");              //result: 567

  C 或 c

  货币

  Console.Write("{0:C}",2.5);   //$2.50

  Console.Write("{0:C}",-2.5); //($2.50)

  D 或 d

  十进制数

  Console.Write("{0:D5}",25);   //00025

  E 或 e

  科学型

  Console.Write("{0:E}",250000);   //2.500000E+005

  F 或 f

  固定点

  Console.Write("{0:F2}",25);   //25.00

  Console.Write("{0:F0}",25);   //25

  G 或 g

  常规

  Console.Write("{0:G}",2.5);   //2.5

  N 或 n

  数字

  Console.Write("{0:N}",2500000);   //2,500,000.00

 X 或 x

  十六进制

  Console.Write("{0:X}",250);   //FA

  Console.Write("{0:X}",0xffff);   //FFFF





2.

1、格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元)


string.Format(”{0:C}”,0.2) 结果为:¥0.20 (英文操作系统结果:$0.20)


默认格式化小数点后面保留两位小数,如果需要保留一位或者更多,可以指定位数
string.Format(”{0:C1}”,23.15) 结果为:¥23.2 (截取会自动四舍五入)


格式化多个Object实例
string.Format(”市场价:{0:C},优惠价{1:C}”,23.15,19.82)


2、格式化十进制的数字(格式化成固定的位数,位数不能少于未格式化前,只支持整形)


string.Format(”{0:D3}”,23) 结果为:023


string.Format(”{0:D2}”,1223) 结果为:1223,(精度说明符指示结果字符串中所需的最少数字个数。)


3、用分号隔开的数字,并指定小数点后的位数


string.Format(”{0:N}”, 14200) 结果为:14,200.00 (默认为小数点后面两位)


string.Format(”{0:N3}”, 14200.2458) 结果为:14,200.246 (自动四舍五入)


4、格式化百分比


string.Format(”{0:P}”, 0.24583) 结果为:24.58% (默认保留百分的两位小数)


string.Format(”{0:P1}”, 0.24583) 结果为:24.6% (自动四舍五入)


5、零占位符和数字占位符


string.Format(”{0:0000.00}”, 12394.039) 结果为:12394.04 


string.Format(”{0:0000.00}”, 194.039) 结果为:0194.04


string.Format(”{0:###.##}”, 12394.039) 结果为:12394.04 


string.Format(”{0:####.#}”, 194.039) 结果为:194


下面的这段说明比较难理解,多测试一下实际的应用就可以明白了。
零占位符:
如果格式化的值在格式字符串中出现“0”的位置有一个数字,则此数字被复制到结果字符串中。小数点前最左边的“0”的位置和小数点后最右边的“0”的位置确定总在结果字符串中出现的数字范围。
“00”说明符使得值被舍入到小数点前最近的数字,其中零位总被舍去。


数字占位符:
如果格式化的值在格式字符串中出现“#”的位置有一个数字,则此数字被复制到结果字符串中。否则,结果字符串中的此位置不存储任何值。 
请注意,如果“0”不是有效数字,此说明符永不显示“0”字符,即使“0”是字符串中唯一的数字。如果“0”是所显示的数字中的有效数字,则显示“0”字符。 
“##”格式字符串使得值被舍入到小数点前最近的数字,其中零总被舍去。


6、日期格式化


string.Format(”{0:d}”,System.DateTime.Now) 结果为:2009-3-20 (月份位置不是03)


string.Format(”{0:D}”,System.DateTime.Now) 结果为:2009年3月20日


string.Format(”{0:f}”,System.DateTime.Now) 结果为:2009年3月20日 15:37


string.Format(”{0:F}”,System.DateTime.Now) 结果为:2009年3月20日 15:37:52


string.Format(”{0:g}”,System.DateTime.Now) 结果为:2009-3-20 15:38


string.Format(”{0:G}”,System.DateTime.Now) 结果为:2009-3-20 15:39:27


string.Format(”{0:m}”,System.DateTime.Now) 结果为:3月20日


string.Format(”{0:t}”,System.DateTime.Now) 结果为:15:41


string.Format(”{0:T}”,System.DateTime.Now) 结果为:15:41:50 




更详细的说明请下面微软对此的说明或者上msdn上查询。


标准数字格式字符串


格式说明符 名称 说明 
C 或 c
 货币
 数字转换为表示货币金额的字符串。转换由当前 NumberFormatInfo 对象的货币格式信息控制。


精度说明符指示所需的小数位数。如果省略精度说明符,则使用当前 NumberFormatInfo 对象给定的默认货币精度。
 
D 或 d
 十进制数
 只有整型才支持此格式。数字转换为十进制数字 (0-9) 的字符串,如果数字为负,则前面加负号。


精度说明符指示结果字符串中所需的最少数字个数。如果需要的话,则用零填充该数字的左侧,以产生精度说明符给定的数字个数。
 
E 或 e
 科学记数法(指数)
 数字转换为“-d.ddd…E+ddd”或“-d.ddd…e+ddd”形式的字符串,其中每个“d”表示一个数字 (0-9)。如果该数字为负,则该字符串以减号开头。小数点前总有一个数字。


精度说明符指示小数点后所需的位数。如果省略精度说明符,则使用默认值,即小数点后六位数字。


格式说明符的大小写指示在指数前加前缀“E”还是“e”。指数总是由正号或负号以及最少三位数字组成。如果需要,用零填充指数以满足最少三位数字的要求。
 
F 或 f
 定点
 数字转换为“-ddd.ddd…”形式的字符串,其中每个“d”表示一个数字 (0-9)。如果该数字为负,则该字符串以减号开头。


精度说明符指示所需的小数位数。如果忽略精度说明符,则使用当前 NumberFormatInfo 对象给定的默认数值精度。
 
G 或 g
 常规
 根据数字类型以及是否存在精度说明符,数字会转换为定点或科学记数法的最紧凑形式。如果精度说明符被省略或为零,则数字的类型决定默认精度,如下表所示。


?Byte 或 SByte:3


?Int16 或 UInt16:5


?Int32 或 UInt32:10


?Int64 或 UInt64:19


?Single:7


?Double:15


?Decimal:29


如果用科学记数法表示数字时指数大于 -5 而且小于精度说明符,则使用定点表示法;否则使用科学记数法。如果要求有小数点,并且忽略尾部零,则结果包含小数点。如果精度说明符存在,并且结果的有效数字位数超过指定精度,则通过舍入删除多余的尾部数字。


上述规则有一个例外:如果数字是 Decimal 而且省略精度说明符时。在这种情况下总使用定点表示法并保留尾部零。


使用科学记数法时,如果格式说明符是“G”,结果的指数带前缀“E”;如果格式说明符是“g”,结果的指数带前缀“e”。
 
N 或 n
 数字
 数字转换为“-d,ddd,ddd.ddd…”形式的字符串,其中“-”表示负数符号(如果需要),“d”表示数字 (0-9),“,”表示数字组之间的千位分隔符,“.”表示小数点符号。实际的负数模式、数字组大小、千位分隔符以及十进制分隔符由当前 NumberFormatInfo 对象指定。


精度说明符指示所需的小数位数。如果忽略精度说明符,则使用当前 NumberFormatInfo 对象给定的默认数值精度。
 
P 或 p
 百分比
 数字转换为由 NumberFormatInfo.PercentNegativePattern 或 NumberFormatInfo.PercentPositivePattern 属性定义的、表示百分比的字符串,前者用于数字为负的情况,后者用于数字为正的情况。已转换的数字乘以 100 以表示为百分比。


精度说明符指示所需的小数位数。如果忽略精度说明符,则使用当前 NumberFormatInfo 对象给定的默认数值精度。
 
R 或 r
 往返过程
 只有 Single 和 Double 类型支持此格式。往返过程说明符保证转换为字符串的数值再次被分析为相同的数值。使用此说明符格式化数值时,首先使用常规格式对其进行测试:Double 使用 15 位精度,Single 使用 7 位精度。如果此值被成功地分析回相同的数值,则使用常规格式说明符对其进行格式化。但是,如果此值未被成功地分析为相同数值,则它这样格式化:Double 使用 17 位精度,Single 使用 9 位精度。


虽然此处可以存在精度说明符,但它将被忽略。使用此说明符时,往返过程优先于精度。
 
X 或 x
 十六进制数
 只有整型才支持此格式。数字转换为十六进制数字的字符串。格式说明符的大小写指示对大于 9 的十六进制数字使用大写字符还是小写字符。例如,使用“X”产生“ABCDEF”,使用“x”产生“abcdef”。


精度说明符指示结果字符串中所需的最少数字个数。如果需要的话,则用零填充该数字的左侧,以产生精度说明符给定的数字个数。
 
任何其他单个字符
 (未知说明符)
 (未知说明符将引发运行库格式异常。)
 


自定义数字格式字符串


格式说明符 名称 说明 
0
 零占位符
 如果格式化的值在格式字符串中出现“0”的位置有一个数字,则此数字被复制到结果字符串中。小数点前最左边的“0”的位置和小数点后最右边的“0”的位置确定总在结果字符串中出现的数字范围。


“00”说明符使得值被舍入到小数点前最近的数字,其中零位总被舍去。例如,用“00”格式化 34.5 将得到值 35。
 
#
 数字占位符
 如果格式化的值在格式字符串中出现“#”的位置有一个数字,则此数字被复制到结果字符串中。否则,结果字符串中的此位置不存储任何值。


请注意,如果“0”不是有效数字,此说明符永不显示“0”字符,即使“0”是字符串中唯一的数字。如果“0”是所显示的数字中的有效数字,则显示“0”字符。


“##”格式字符串使得值被舍入到小数点前最近的数字,其中零总被舍去。例如,用“##”格式化 34.5 将得到值 35。
 
.
 小数点
 格式字符串中的第一个“.”字符确定格式化的值中的小数点分隔符的位置;任何其他“.”字符被忽略。


用作小数点分隔符的实际字符由控制格式化的 NumberFormatInfo 的 NumberDecimalSeparator 属性确定。
 
,
 千位分隔符和数字比例换算
 “,”字符可作为千位分隔符说明符和数字比例换算说明符。


千位分隔符说明符:如果在两个数字占位符(0 或 #)之间指定一个或多个“,”字符用于设置数字整数位的格式,则在输出的整数部分中每个数字组之间插入一个组分隔符字符。


当前 NumberFormatInfo 对象的 NumberGroupSeparator 和 NumberGroupSizes 属性将确定用作数字组分隔符的字符以及每个数字组的大小。例如,如果使用字符串“#,#”和固定区域性对数字 1000 进行格式化,则输出为“1,000”。


数字比例换算说明符:如果在紧邻显式或隐式小数点的左侧指定一个或多个“,”字符,则每出现一个数字比例换算说明符便将要格式化的数字除以 1000。例如,如果使用字符串“0,,”对数字 1000000000 进行格式化,则输出为“100”。


可以在同一格式字符串中使用千位分隔符说明符和数字比例换算说明符。例如,如果使用字符串“#,0,,”和固定区域性对数字 10000000000 进行格式化,则输出为“1,000”。
 
%
 百分比占位符
 在格式字符串中出现“%”字符将导致数字在格式化之前乘以 100。适当的符号插入到数字本身在格式字符串中出现“%”的位置。使用的百分比字符由当前的 NumberFormatInfo 类确定。
 
E0


E+0


E-0


e0


e+0


e-0
 科学记数法
 如果“E”、“E+”、“E-”、“e”、“e+”或“e-”中的任何一个字符串出现在格式字符串中,而且后面紧跟至少一个“0”字符,则数字用科学记数法来格式化,在数字和指数之间插入“E”或“e”。跟在科学记数法指示符后面的“0”字符数确定指数输出的最小位数。“E+”和“e+”格式指示符号字符(正号或负号)应总是置于指数前面。“E”、“E-”、“e”或“e-”格式指示符号字符仅置于负指数前面。
 
\
 转义符
 在 C# 和 C++ 中,反斜杠字符使格式字符串中的下一个字符被解释为转义序列。它与传统的格式化序列一起使用,如“\n”(换行)。


在某些语言中,转义符本身用作文本时必须跟在转义符之后。否则,编译器将该字符理解为转义符。使用字符串“\\”显示“\”。


请注意,Visual Basic 中不支持此转义符,但是 ControlChars 提供相同的功能。
 
’ABC’


“ABC”
 字符串
 引在单引号或双引号中的字符被复制到结果字符串中,而且不影响格式化。
 
;
 部分分隔符
 “;”字符用于分隔格式字符串中的正数、负数和零各部分。
 
其他
 所有其他字符
 所有其他字符被复制到结果字符串中,而且不影响格式化。
 


 


标准 DateTime 格式字符串


格式说明符 名称 说明 
d
 短日期模式
 表示由当前 ShortDatePattern 属性定义的自定义 DateTime 格式字符串。


例如,用于固定区域性的自定义格式字符串为“MM/dd/yyyy”。
 
D
 长日期模式
 表示由当前 LongDatePattern 属性定义的自定义 DateTime 格式字符串。


例如,用于固定区域性的自定义格式字符串为“dddd, dd MMMM yyyy”。
 
f
 完整日期/时间模式(短时间)
 表示长日期 (D) 和短时间 (t) 模式的组合,由空格分隔。
 
F
 完整日期/时间模式(长时间)
 表示由当前 FullDateTimePattern 属性定义的自定义 DateTime 格式字符串。


例如,用于固定区域性的自定义格式字符串为“dddd, dd MMMM yyyy HH:mm:ss”。
 
g
 常规日期/时间模式(短时间)
 表示短日期 (d) 和短时间 (t) 模式的组合,由空格分隔。
 
G
 常规日期/时间模式(长时间)
 表示短日期 (d) 和长时间 (T) 模式的组合,由空格分隔。
 
M 或 m
 月日模式
 表示由当前 MonthDayPattern 属性定义的自定义 DateTime 格式字符串。


例如,用于固定区域性的自定义格式字符串为“MMMM dd”。
 
o
 往返日期/时间模式
 表示使用保留时区信息的模式的自定义 DateTime 格式字符串。该模式专用于往返 DateTime 格式(包括文本形式的 Kind 属性)。随后将 Parse 或 ParseExact 与正确的 Kind 属性值一起使用可以对格式化的字符串进行反向分析。


自定义格式字符串为“yyyy’-'MM’-'dd’T'HH’:'mm’:’ss.fffffffK”。


用于此说明符的模式是定义的标准。因此,无论所使用的区域性或所提供的格式提供程序是什么,它总是相同的。
 
R 或 r
 RFC1123 模式
 表示由当前 RFC1123Pattern 属性定义的自定义 DateTime 格式字符串。该模式是定义的标准,并且属性是只读的。因此,无论所使用的区域性或所提供的格式提供程序是什么,它总是相同的。


定义格式字符串为“ddd, dd MMM yyyy HH’:'mm’:’ss ‘GMT’”。


格式化不会修改正在格式化的 DateTime 对象的值。因此,应用程序在使用此格式说明符之前必须将该值转换为协调世界时 (UTC)。
 
s
 可排序的日期/时间模式;符合 ISO 8601
 表示由当前 SortableDateTimePattern 属性定义的自定义 DateTime 格式字符串。此模式是定义的标准,并且属性是只读的。因此,无论所使用的区域性或所提供的格式提供程序是什么,它总是相同的。


自定义格式字符串为“yyyy’-'MM’-'dd’T'HH’:'mm’:’ss”。
 
t
 短时间模式
 表示由当前 ShortTimePattern 属性定义的自定义 DateTime 格式字符串。


例如,用于固定区域性的自定义格式字符串为“HH:mm”。
 
T
 长时间模式
 表示由当前 LongTimePattern 属性定义的自定义 DateTime 格式字符串。


例如,用于固定区域性的自定义格式字符串为“HH:mm:ss”。
 
u
 通用的可排序日期/时间模式
 表示由当前 UniversalSortableDateTimePattern 属性定义的自定义 DateTime 格式字符串。此模式是定义的标准,并且属性是只读的。因此,无论所使用的区域性或所提供的格式提供程序是什么,它总是相同的。


自定义格式字符串为“yyyy’-'MM’-'dd HH’:'mm’:’ss’Z'”。


格式化日期和时间时不进行时区转换。因此,应用程序在使用此格式说明符之前必须将本地日期和时间转换为协调世界时 (UTC)。
 
U
 通用的可排序日期/时间模式
 表示由当前 FullDateTimePattern 属性定义的自定义 DateTime 格式字符串。


此模式与完整日期/长时间 (F) 模式相同。但是,格式化将作用于等效于正在格式化的 DateTime 对象的协调世界时 (UTC)。
 
Y 或 y
 年月模式
 表示由当前 YearMonthPattern 属性定义的自定义 DateTime 格式字符串。


例如,用于固定区域性的自定义格式字符串为“yyyy MMMM”。
 
任何其他单个字符
 (未知说明符)
 未知说明符将引发运行时格式异常。
 


 


自定义 DateTime 格式字符串


格式说明符 说明 
d
 将月中日期表示为从 1 至 31 的数字。一位数字的日期设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。
 
dd
 将月中日期表示为从 01 至 31 的数字。一位数字的日期设置为带前导零的格式。
 
ddd
 将一周中某天的缩写名称表示为当前 System.Globalization.DateTimeFormatInfo.AbbreviatedDayNames 属性中定义的名称。
 
dddd(另加任意数量的“d”说明符)
 将一周中某天的全名表示为当前 System.Globalization.DateTimeFormatInfo.DayNames 属性中定义的名称。
 
f
 表示秒部分的最高有效位。


请注意,如果“f”格式说明符单独使用,没有其他格式说明符,则该说明符被看作是“f”标准 DateTime 格式说明符(完整日期/时间模式)。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。


将此格式说明符与 ParseExact 或 TryParseExact 方法一起使用时,所用“f”格式说明符的数目指示要分析的秒部分的最高有效位位数。
 
ff
 表示秒部分的两个最高有效位。
 
fff
 表示秒部分的三个最高有效位。
 
ffff
 表示秒部分的四个最高有效位。
 
fffff
 表示秒部分的五个最高有效位。
 
ffffff
 表示秒部分的六个最高有效位。
 
fffffff
 表示秒部分的七个最高有效位。
 
F
 表示秒部分的最高有效位。如果该位为零,则不显示任何信息。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。


将此格式说明符与 ParseExact 或 TryParseExact 方法一起使用时,所用“F”格式说明符的数目指示要分析的秒部分的最高有效位最大位数。
 
FF
 表示秒部分的两个最高有效位。但不显示尾随零(或两个零位)。
 
FFF
 表示秒部分的三个最高有效位。但不显示尾随零(或三个零位)。
 
FFFF
 表示秒部分的四个最高有效位。但不显示尾随零(或四个零位)。
 
FFFFF
 表示秒部分的五个最高有效位。但不显示尾随零(或五个零位)。
 
FFFFFF
 表示秒部分的六个最高有效位。但不显示尾随零(或六个零位)。
 
FFFFFFF
 表示秒部分的七个最高有效位。但不显示尾随零(或七个零位)。
 
g 或 gg(另加任意数量的“g”说明符)
 表示时期或纪元(例如 A.D.)。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该说明符。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。
 
h
 将小时表示为从 1 至 12 的数字,即通过 12 小时制表示小时,自午夜或中午开始对整小时计数。因此,午夜后经过的某特定小时数与中午过后的相同小时数无法加以区分。小时数不进行舍入,一位数字的小时数设置为不带前导零的格式。例如,给定时间为 5:43,则此格式说明符显示“5”。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。
 
hh, hh(另加任意数量的“h”说明符)
 将小时表示为从 01 至 12 的数字,即通过 12 小时制表示小时,自午夜或中午开始对整小时计数。因此,午夜后经过的某特定小时数与中午过后的相同小时数无法加以区分。小时数不进行舍入,一位数字的小时数设置为带前导零的格式。例如,给定时间为 5:43,则此格式说明符显示“05”。
 
H
 将小时表示为从 0 至 23 的数字,即通过从零开始的 24 小时制表示小时,自午夜开始对小时计数。一位数字的小时数设置为不带前导零的格式。
 
HH, HH(另加任意数量的“H”说明符)
 将小时表示为从 00 至 23 的数字,即通过从零开始的 24 小时制表示小时,自午夜开始对小时计数。一位数字的小时数设置为带前导零的格式。
 
K
 表示 DateTime.Kind 属性的不同值,即“Local”、“Utc”或“Unspecified”。此说明符以文本形式循环设置 Kind 值并保留时区。如果 Kind 值为“Local”,则此说明符等效于“zzz”说明符,用于显示本地时间偏移量,例如“-07:00”。对于“Utc”类型值,该说明符显示字符“Z”以表示 UTC 日期。对于“Unspecified”类型值,该说明符等效于“”(无任何内容)。
 
m
 将分钟表示为从 0 至 59 的数字。分钟表示自前一小时后经过的整分钟数。一位数字的分钟数设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。
 
mm, mm(另加任意数量的“m”说明符)
 将分钟表示为从 00 至 59 的数字。分钟表示自前一小时后经过的整分钟数。一位数字的分钟数设置为带前导零的格式。
 
M
 将月份表示为从 1 至 12 的数字。一位数字的月份设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。
 
MM
 将月份表示为从 01 至 12 的数字。一位数字的月份设置为带前导零的格式。
 
MMM
 将月份的缩写名称表示为当前 System.Globalization.DateTimeFormatInfo.AbbreviatedMonthNames 属性中定义的名称。
 
MMMM
 将月份的全名表示为当前 System.Globalization.DateTimeFormatInfo.MonthNames 属性中定义的名称。
 
s
 将秒表示为从 0 至 59 的数字。秒表示自前一分钟后经过的整秒数。一位数字的秒数设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。
 
ss, ss(另加任意数量的“s”说明符)
 将秒表示为从 00 至 59 的数字。秒表示自前一分钟后经过的整秒数。一位数字的秒数设置为带前导零的格式。
 
t
 表示当前 System.Globalization.DateTimeFormatInfo.AMDesignator 或 System.Globalization.DateTimeFormatInfo.PMDesignator 属性中定义的 A.M./P.M. 指示符的第一个字符。如果正在格式化的时间中的小时数小于 12,则使用 A.M. 指示符;否则使用 P.M. 指示符。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。
 
tt, tt(另加任意数量的“t”说明符)
 将 A.M./P.M. 指示符表示为当前 System.Globalization.DateTimeFormatInfo.AMDesignator 或 System.Globalization.DateTimeFormatInfo.PMDesignator 属性中定义的内容。如果正在格式化的时间中的小时数小于 12,则使用 A.M. 指示符;否则使用 P.M. 指示符。
 
y
 将年份表示为最多两位数字。如果年份多于两位数,则结果中仅显示两位低位数。如果年份少于两位数,则该数字设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。
 
yy
 将年份表示为两位数字。如果年份多于两位数,则结果中仅显示两位低位数。如果年份少于两位数,则用前导零填充该数字使之达到两位数。
 
yyy
 将年份表示为三位数字。如果年份多于三位数,则结果中仅显示三位低位数。如果年份少于三位数,则用前导零填充该数字使之达到三位数。


请注意,对于年份可以为五位数的泰国佛历,此格式说明符将显示全部五位数。
 
yyyy
 将年份表示为四位数字。如果年份多于四位数,则结果中仅显示四位低位数。如果年份少于四位数,则用前导零填充该数字使之达到四位数。


请注意,对于年份可以为五位数的泰国佛历,此格式说明符将呈现全部五位数。
 
yyyyy(另加任意数量的“y”说明符)
 将年份表示为五位数字。如果年份多于五位数,则结果中仅显示五位低位数。如果年份少于五位数,则用前导零填充该数字使之达到五位数。


如果存在额外的“y”说明符,则用所需个数的前导零填充该数字使之达到“y”说明符的数目。
 
z
 表示系统时间距格林威治时间 (GMT) 以小时为单位测量的带符号时区偏移量。例如,位于太平洋标准时区中的计算机的偏移量为“-8”。


偏移量始终显示为带有前导符号。加号 (+) 指示小时数早于 GMT,减号 (-) 指示小时数迟于 GMT。偏移量范围为 –12 至 +13。一位数字的偏移量设置为不带前导零的格式。偏移量受夏时制影响。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。
 
zz
 表示系统时间距格林威治时间 (GMT) 以小时为单位测量的带符号时区偏移量。例如,位于太平洋标准时区中的计算机的偏移量为“-08”。


偏移量始终显示为带有前导符号。加号 (+) 指示小时数早于 GMT,减号 (-) 指示小时数迟于 GMT。偏移量范围为 –12 至 +13。一位数字的偏移量设置为带前导零的格式。偏移量受夏时制影响。
 
zzz, zzz(另加任意数量的“z”说明符)
 表示系统时间距格林威治时间 (GMT) 以小时和分钟为单位测量的带符号时区偏移量。例如,位于太平洋标准时区中的计算机的偏移量为“-08:00”。


偏移量始终显示为带有前导符号。加号 (+) 指示小时数早于 GMT,减号 (-) 指示小时数迟于 GMT。偏移量范围为 –12 至 +13。一位数字的偏移量设置为带前导零的格式。偏移量受夏时制影响。
 
:
 当前 System.Globalization.DateTimeFormatInfo.TimeSeparator 属性中定义的时间分隔符,用于区分小时、分钟和秒。
 
/
 当前 System.Globalization.DateTimeFormatInfo.DateSeparator 属性中定义的日期分隔符,用于区分年、月和日。
 

 带引号的字符串(引号)。显示两个引号 (”) 之间的任意字符串的文本值。在每个引号前使用转义符 (\)。
 

 带引号的字符串(撇号)。显示两个撇号 (’) 字符之间的任意字符串的文本值。
 
%c
 当自定义 DateTime 格式字符串只包含自定义格式说明符“c”时,表示与该自定义格式说明符关联的结果。也就是说,若要单独使用自定义格式说明符“d”、“f”、“F”、“h”、“m”、“s”、“t”、“y”、“z”、“H”或“M”,请指定“%d”、“%f”、“%F”、“%h”、“%m”、“%s”、“%t”、“%y”、“%z”、“%H”或“%M”。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。
 
\c
 转义符。当字符“c”前带有转义符 (\) 时,将该字符显示为文本。若要将反斜杠字符本身插入结果字符串,请使用两个转义符(“\\”)。
 
任何其他字符
 所有其他字符被复制到结果字符串中,而且不影响格式化。
 


枚举格式字符串


格式字符串 结果 
G 或 g
 如有可能,将枚举项显示为字符串值,否则显示当前实例的整数值。如果枚举定义中设置了 Flags 属性,则串联每个有效项的字符串值并将各值用逗号分开。如果未设置 Flags 属性,则将无效值显示为数字项。
 
F 或 f
 如有可能,将枚举项显示为字符串值。如果值可以完全显示为枚举项的总和(即使未提供 Flags 属性),则串联每个有效项的字符串值并将各值用逗号分开。如果值不能完全由枚举项确定,则将值格式化为整数值。
 
D 或 d
 以尽可能短的表示形式将枚举项显示为整数值。
 
X 或 x
 将枚举项显示为十六进制值。按需要将值表示为带有前导零,以确保值的长度最少有八位。
 

3.

C#格式化数值结果表

字符

说明

示例

输出

C货币string.Format("{0:C3}", 2)$2.000
D十进制string.Format("{0:D3}", 2)002
E科学计数法1.20E+0011.20E+001
G常规string.Format("{0:G}", 2)2
N用分号隔开的数字string.Format("{0:N}", 250000)250,000.00
X十六进制string.Format("{0:X000}", 12)C
  string.Format("{0:000.000}", 12.2)012.200

Strings

There really isn't any formatting within a strong, beyond it's alignment. Alignment works for any argument being printed in a String.Format call.

 

SampleGenerates
String.Format("->{1,10}<-", "Hello");-> Hello<-
String.Format("->{1,-10}<-", "Hello");->Hello <-

Numbers

Basic number formatting specifiers:

 

SpecifierTypeFormat

Output
(Passed
Double 1.42)

Output
(Passed
Int -12400)

cCurrency{0:c}$1.42-$12,400
dDecimal (Whole number){0:d}System.
FormatException
-12400
eScientific{0:e}1.420000e+000-1.240000e+004
fFixed point{0:f}1.42-12400.00
gGeneral{0:g}1.42-12400
nNumber with commas for thousands{0:n}1.42-12,400
rRound trippable{0:r}1.42System.
FormatException
xHexadecimal{0:x4}System.
FormatException
cf90

Custom number formatting:

 

SpecifierTypeExample Output (Passed Double 1500.42)Note
0Zero placeholder{0:00.0000}1500.4200Pads with zeroes.
#Digit placeholder{0:(#).##}(1500).42 
.Decimal point{0:0.0}1500.4 
,Thousand separator{0:0,0}1,500Must be between two zeroes.
,.Number scaling{0:0,.} 2Comma adjacent to Period scales by 1000.
%Percent{0:0%}150042%Multiplies by 100, adds % sign.
eExponent placeholder{0:00e+0}15e+2Many exponent formats available.
;Group separatorsee below  

The group separator is especially useful for formatting currency values which require that negative values be enclosed in parentheses. This currency formatting example at the bottom of this document makes it obvious:

Dates

Note that date formatting is especially dependant on the system's regional settings; the example strings here are from my local locale.

 

SpecifierTypeExample (Passed System.DateTime.Now)
dShort date10/12/2002
DLong dateDecember 10, 2002
tShort time10:11 PM
TLong time10:11:29 PM
fFull date & time December 10, 2002 10:11 PM
FFull date & time (long)December 10, 2002 10:11:29 PM
gDefault date & time10/12/2002 10:11 PM
GDefault date & time (long)10/12/2002 10:11:29 PM
MMonth day patternDecember 10
rRFC1123 date stringTue, 10 Dec 2002 22:11:29 GMT
sSortable date string2002-12-10T22:11:29
uUniversal sortable, local time2002-12-10 22:13:50Z
UUniversal sortable, GMTDecember 11, 2002 3:13:50 AM
YYear month patternDecember, 2002

The 'U' specifier seems broken; that string certainly isn't sortable.

Custom date formatting:

 

SpecifierTypeExample Example Output
ddDay{0:dd}10
dddDay name{0:ddd}Tue
ddddFull day name{0:dddd}Tuesday
f, ff, ...Second fractions{0:fff}932
gg, ...Era{0:gg}A.D.
hh2 digit hour{0:hh}10
HH2 digit hour, 24hr format{0:HH}22
mmMinute 00-59{0:mm}38
MMMonth 01-12{0:MM}12
MMMMonth abbreviation{0:MMM}Dec
MMMMFull month name{0:MMMM}December
ssSeconds 00-59{0:ss}46
ttAM or PM{0:tt}PM
yyYear, 2 digits{0:yy}02
yyyyYear{0:yyyy}2002
zzTimezone offset, 2 digits{0:zz}-05
zzzFull timezone offset{0:zzz}-05:00
:Separator{0:hh:mm:ss}10:43:20
/Separator{0:dd/MM/yyyy}10/12/2002

Enumerations

 

SpecifierType
gDefault (Flag names if available, otherwise decimal)
fFlags always
dInteger always
xEight digit hex.

Some Useful Examples

String.Format("{0:$#,##0.00;($#,##0.00);Zero}", value);

This will output "$1,240.00" if passed 1243.50. It will output the same format but in parentheses if the number is negative, and will output the string "Zero" if the number is zero.

String.Format("{0:(###) ###-####}", 18005551212);

This will output "(800) 555-1212".

 

变量.ToString()


字符型转换 转为字符串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00%


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值