String.Format格式说明
2014-03-09 14:49
423 查看
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<
4000
/span>.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+001 | 1.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.Sample | Generates |
String.Format("->{1,10}<-", "Hello"); | -> Hello<- |
String.Format("->{1,-10}<-", "Hello"); | ->Hello <- |
Numbers
Basic number formatting specifiers:Specifier | Type | Format | Output (Passed Double 1.42) | Output (Passed Int -12400) |
c | Currency | {0:c} | $1.42 | -$12,400 |
d | Decimal (Whole number) | {0:d} | System. FormatException | -12400 |
e | Scientific | {0:e} | 1.420000e+000 | -1.240000e+004 |
f | Fixed point | {0:f} | 1.42 | -12400.00 |
g | General | {0:g} | 1.42 | -12400 |
n | Number with commas for thousands | {0:n} | 1.42 | -12,400 |
r | Round trippable | {0:r} | 1.42 | System. FormatException |
x | Hexadecimal | {0:x4} | System. FormatException | cf90 |
Specifier | Type | Example | Output (Passed Double 1500.42) | Note |
0 | Zero placeholder | {0:00.0000} | 1500.4200 | Pads with zeroes. |
# | Digit placeholder | {0:(#).##} | (1500).42 | |
. | Decimal point | {0:0.0} | 1500.4 | |
, | Thousand separator | {0:0,0} | 1,500 | Must be between two zeroes. |
,. | Number scaling | {0:0,.} | 2 | Comma adjacent to Period scales by 1000. |
% | Percent | {0:0%} | 150042% | Multiplies by 100, adds % sign. |
e | Exponent placeholder | {0:00e+0} | 15e+2 | Many exponent formats available. |
; | Group separator | see below |
Dates
Note that date formatting is especially dependant on the system's regional settings; the example strings here are from my local locale.Specifier | Type | Example (Passed System.DateTime.Now) |
d | Short date | 10/12/2002 |
D | Long date | December 10, 2002 |
t | Short time | 10:11 PM |
T | Long time | 10:11:29 PM |
f | Full date & time | December 10, 2002 10:11 PM |
F | Full date & time (long) | December 10, 2002 10:11:29 PM |
g | Default date & time | 10/12/2002 10:11 PM |
G | Default date & time (long) | 10/12/2002 10:11:29 PM |
M | Month day pattern | December 10 |
r | RFC1123 date string | Tue, 10 Dec 2002 22:11:29 GMT |
s | Sortable date string | 2002-12-10T22:11:29 |
u | Universal sortable, local time | 2002-12-10 22:13:50Z |
U | Universal sortable, GMT | December 11, 2002 3:13:50 AM |
Y | Year month pattern | December, 2002 |
Custom date formatting:
Specifier | Type | Example | Example Output |
dd | Day | {0:dd} | 10 |
ddd | Day name | {0:ddd} | Tue |
dddd | Full day name | {0:dddd} | Tuesday |
f, ff, ... | Second fractions | {0:fff} | 932 |
gg, ... | Era | {0:gg} | A.D. |
hh | 2 digit hour | {0:hh} | 10 |
HH | 2 digit hour, 24hr format | {0:HH} | 22 |
mm | Minute 00-59 | {0:mm} | 38 |
MM | Month 01-12 | {0:MM} | 12 |
MMM | Month abbreviation | {0:MMM} | Dec |
MMMM | Full month name | {0:MMMM} | December |
ss | Seconds 00-59 | {0:ss} | 46 |
tt | AM or PM | {0:tt} | PM |
yy | Year, 2 digits | {0:yy} | 02 |
yyyy | Year | {0:yyyy} | 2002 |
zz | Timezone offset, 2 digits | {0:zz} | -05 |
zzz | Full timezone offset | {0:zzz} | -05:00 |
: | Separator | {0:hh:mm:ss} | 10:43:20 |
/ | Separator | {0:dd/MM/yyyy} | 10/12/2002 |
Enumerations
Specifier | Type |
g | Default (Flag names if available, otherwise decimal) |
f | Flags always |
d | Integer always |
x | Eight 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%
相关文章推荐
- C# String.Format格式说明
- String.Format格式说明
- String.Format格式说明
- [导入]String.Format格式说明
- String.Format格式说明
- String.Format格式说明
- String.Format格式说明
- String.Format格式说明
- String.Format格式说明
- String.Format格式说明
- string.Format 格式说明
- C# String.Format格式说明
- String.Format格式说明 (1)
- c# ToString() 格式化字符串 、C# String.Format格式说明 http://linglong117.blog.163.com/blog/static/2771454720
- C# ToString格式字符串整理(Format)(数字、日期和枚举的标准格式设置说明符)
- C# String.Format格式说明
- String.Format格式说明
- String.Format格式说明
- string.Format 格式说明
- String.Format格式说明