将字符串格式化后输出,是应用程序中一种相当常见的操作,在很多情况下我们需要格式化字符串成一定形式便于用户的阅读。例如将日期的显示、货币的显示等。
String类提供了Format方法进行格式化的操作,针对这个方法我们进行详细的说明。Format方法提供了很多重载的版本,其中最为常用的有以下两种方式:
Public Static String format(IformatProvider provider, string format, params object[] ars)。
Public Static String format(string format, params object[] ars)。
第一种形式比第二种形式多了一个IformatProvider接口参数,它表示格式化字符串的区域形式,由于国家区域的不同字符串的显示方式也有所不同,因此我们可以根据不同的区域设置不同的格式化方式。例如美国和中国在表示货币的形式就是不同的。如果省略了这个参数那么系统会根据当前操作系统的区域来显示。那么我们该如何表示某个区域呢?我们看一下下面的实例。
知识点
Ø CultureInfo类在System.Globalization名称空间下,该类的构造函数中的参数添加的是各个区域国家的名称。常用的区域名称如下:
名称 | 含义 |
zh-cn | 中国 |
en-US | 美国 |
zh-hk | 中国香港 |
en-GB | 英国 |
Ja-JP | 日本 |
Ø 方法中的第二个参数string format,它表示格式化的规范,它的形式如下:
{arg [, n] [: formatstring]}。其中arg表示占位符,从零开始。【,n】表示以空格填补格式化区域的宽度,n可以是正值也可以是负值。如果为正值表示格式化的值靠右对齐,负值则靠左对齐,可以省略。[: formatstring] 表示格式化字符串的形式,本例中表示货币形式。格式化字符串的形式大体可以分为三类:格式化数值、格式化日期时间和自定义数字格式化形式。如下表。
格式化数值
格式规范 | 名称 | 说明 | 举例 |
C或c | 货币 | 将数值转换为货币的形式并能够指定所需小数的位数 | string str = String.Format("{0:c3}", 125.23569) |
D或d | 十进制 | 格式化整数,指示产生字符串中,其所需的最少位数。如果有必要,数值以零不起左边规范其指定的位数。 | string str = String.Format("{0:D3}", 12)。 注意:要格式化的目标必须是整数。 |
E或e | 科学计数 | 将数值转换为“-d.ddd...E+ddd ”的形式,其中每个d都是0-9的数字,其位数默认为6位。 |
string str = String.Format("{0:E3}", 12563.45678) |
F或f | 固定点 | 将数值转换为”-d.ddd”的形式的字符串。其中d表示0-9的数字。可以规范精确到小数点的位数。 | string str = String.Format("{0:f3}", 12563.45678) |
N或n | 编号 | 数字被转换为财务书写形式:“d,ddd,ddd.dd”,千分位符号在小数点左边插入每三位数一组的各个组之间。可以规范小数点的位数。 | string str = String.Format("{0:n3}", 12563789.45678) |
P或p | 百分比 | 格式化数值以百分比的形式输出,可以指定小数点的位数。 | string str = String.Format("{0:P3}", 0.125696) |
X或x | 十六进制 | 将十进制整数转换为十六进制整数。 | string str = String.Format("{0:X}", 150) |
上面表中列出了默认格式的规范,你也可以选择自定义所需的格式。C#提供了一种自定义格式的的字符利用这些字符你可以根据自己的需求,定义所需的格式模板。
自定义数字格式
格式字符 | 说 明 |
0 | 利用0将格式化的字符填满 |
# | 代表数字 |
。 | 指定小数点的位置 |
, | 千位数分隔符 |
% | 百分比符号 |
E0 E-0 E+0 | 科学计数符号 |
; | 分段区隔符号 |
知识点
关于“;”分段区符号的使用:它能够将数值进行分段,分别指定整数、负数以及0的格式。形式如下:format(”{0:分段1;分段2;分段3}”,数值)。其中分段1用于指定格式化数值为正数的时候的形式,分段2用于指定格式化负数的时候的形式,分段3表示格式化数值为0的时候所使用的形式。
日期时间格式化
另外一种经常被格式化的数据就是日期时间数据,因为国家不同,经常会有不同的表示方式,c#专门定义了关于日期时间的字符格式规范的形式。
格式规范 | 说明 | 举例 | 结果 |
d | 简短日期模式 | string.Format("{0:d}",DateTime.Now) | 2009-5-24 |
D | 完整日期模式 | string.Format("{0:D}",DateTime.Now) | 2009年5月24日 |
t | 简短时间模式 | string.Format("{0:t}",DateTime.Now) | 17:34 |
T | 完整时间模式 | string.Format("{0:T}",DateTime.Now) | 17:34:21 |
f | 完整可排序日期/时间模式(简短时间) | string.Format("{0:f}",DateTime.Now) | 2009年5月24日 17:35 |
F | 完整可排序日期/时间模式(完整时间) | string.Format("{0:F}",DateTime.Now) | 2009年5月24日17:35:11 |
g | 一般可排序日期/时间模式(简短时间) | string.Format("{0:g}",DateTime.Now) | 2009-5-24 17:38 |
G | 一般可排序日期/时间模式(完整时间) | string.Format("{0:G}",DateTime.Now) | 2009-5-24 17:38:11 |
M或m | 月日模式 | string.Format("{0:M}",DateTime.Now) | 5月24日 |
R或r | RFC1123模式 | string.Format("{0:R}",DateTime.Now) | Sun,24 Mary 2009 17:40:30 GMT |
s | 可排序日期/时间模式;符合ISO8601 | string.Format("{0:s}",DateTime.Now) | 2009-05-24 T17:38:11 |
u | 通用可排序日期/时间模式 | string.Format("{0:u}",DateTime.Now) | 2009-05-24 17:38:11Z |
U | 通用可排序日期/时间模式 | string.Format("{0:U}",DateTime.Now) | 2009年05月24日17:35:11 |
Y或y | 年月模式 | string.Format("{0:Y}",DateTime.Now) | 2009年5月 |
日期时间就如同数值格式化,除了这些默认的格式化规范,也可以选择自定义格式方式。下面我们只介绍常用的格式化方式。
自定义的日期时间格式
格式规范 | 说明 | 举例 | 结果 |
dd | 介于1和31之间的数字来测算当前的日期 | {0:dd} | 25 |
dddd | 显示当前时间是星期几 | {0:dddd} | 星期日 |
hh | 显示小时,12小时制 | {0:hh} | 05 |
HH | 显示小时,24小时制 | {0:HH} | 17 |
mm | 分钟 | {0:mm} | 01 |
MM | 月份 | {0:MM} | 05 |
MMMM | 完整的月份 | {0:MMMM} | 五月 |
ss | 秒 | {0:ss} | 54 |
yy | 不带世纪的年份 | {0:yy} | 09 |
yyyy | 带世纪的年份 | {0:yyyy} | 2009 |
实例:String.Format(”{0:yyyy年MM月dd日}”,DateTime.Now); |