C# Format():格式化字符串
在 C# 中,string 类提供了一个静态的 Format 方法,用于将字符串数据格式化成指定的格式,其常用的语法格式如下。
格式化字符串主要有两种情况,分别是数值类型数据的格式化和日期时间类型数据的格式化,下面分别讲解。
注意,使用 string.Format 方法对数值类型数据进行格式化时,传入的参数必须为数值类型。
使用上表中的标准数值格式规范对不同的数值类型数据进行格式化并输出,代码如下:
C# 支持的标准日期时间类型格式规范如下表所示。
注意,使用 string.Format 方法对日期时间类型数据进行格式化时,传入的参数必须为 DataTime 类型。
例如,使用上表中的标准日期时间类型格式规范对不同的日期时间类型数据进行格式化并输出,代码如下:
程序运行结果为:
通过在 ToString 方法中传入指定的“格式说明符”,也可以实现对数值类型数据和日期时间类型数据的格式化。例如,下面的代码分别使用 ToString 方法将数字 1298 格式化为货币形式、将当前日期格式化为年/月格式,代码如下。
public static string Format(string format,Object arg0) public static string Format(string format,params Object[] args)其中,format 参数用来指定字符串所要格式化的格式,基本格式如下。
{index[,length][:formatString]}
- index:要设置格式的对象的参数列表中的位置(从 0 开始)。
- length:参数的字符串表示形式中包含的最小字符数;如果该值是正的,则参数右对齐;如果该值是负的,则参数左对齐。
- formatString:要设置格式的对象支持的标准或自定义格式字符串。
- arg0:要设置格式的对象。
- args:一个对象数组,其中包含 0 个或多个要设置格式的对象。
- 返回值:格式化后的字符串。
格式化字符串主要有两种情况,分别是数值类型数据的格式化和日期时间类型数据的格式化,下面分别讲解。
1、数值类型的格式化
实际开发中,数值类型有多种显示方式,如货币形式、百分比形式等,C# 支持的标准数值格式规范如下表所示。格式说明符 | 名 称 | 说 明 | 示 例 |
---|---|---|---|
C 或 c | 货币 |
结果:货币值 受以下类型支持:所有数值类型 精度说明符:小数位数 |
¥123 或 ¥-123.456 |
D 或 d | Decimal |
结果:整数类型数字,负号可选 受以下类型支持:仅整数类型 精度说明符:最小位数 |
1234 或 -001234 |
E 或 e | 指数(科学型) |
结果:指数记数法 受以下类型支持:所有数值类型 精度说明符:小数位数 |
1.052033E+003 或 -1.05e+003 |
F 或 f | 定点 |
结果:整数和小数,负号可选 受以下类型支持:所有数值类型 精度说明符:小数位数 |
1234.57 或 -1234.5600 |
N 或 n | Number |
结果:整数和小数、组分隔符和小数分隔符,负号可选 受以下类型支持:所有数值类型 精度说明符:所需的小数位数 |
1234.57或−1234.560 |
P 或 p | 百分比 |
结果:乘以 100 并显示百分比符号的数字 受以下类型支持:所有数值类型 精度说明符:所需的小数位数 |
100.00 % 或 100 % |
X 或 x | 十六进制 |
结果:十六进制字符串 受以下类型支持:仅整数类型 精度说明符:结果字符串中的位数 |
FF 或 00ff |
注意,使用 string.Format 方法对数值类型数据进行格式化时,传入的参数必须为数值类型。
使用上表中的标准数值格式规范对不同的数值类型数据进行格式化并输出,代码如下:
static void Main(string[] args) { //输出金额 Console.WriteLine(string.Format("1251+3950的结果是(以货币形式显示):{0:C}", 1251 + 3950)); //输出科学记数法 Console.WriteLine(string.Format("120000.1用科学记数法表示:{0:E}", 120000.1)); //输出以分隔符显示的数字 Console.WriteLine(string.Format("12800以分隔符数字显示的结果是{0:N0}", 12800)); //输出小数点后两位 Console.WriteLine(string.Format("π取小数点后两位:{0:F2}", Math.PI)); //输出十六进制 Console.WriteLine(string.Format("33的十六进制结果是{0:X4}", 33)); //输出百分号数字 Console.WriteLine(string.Format("天才是由 {0:P0} 的灵感,加上 {1:P0} 的 汗水 。", 0.01, 0.99)); Console.ReadLine(); }程序运行结果为:
1251+3950的结果是(以货币形式显示):¥5,201.00
120000.1用科学记数法表示:1.200001E+05
12800以分隔符数字显示的结果是12,800
π取小数点后两位:3.14
33的十六进制结果是0021
天才是由 1% 的灵感,加上 99% 的汗水 。
2、日期时间类型的格式化
如果希望日期时间按照某种标准格式输出,如短日期格式、完整日期时间格式等,那么可以使用 string 类的 Format 方法将日期时间格式化为指定的格式。C# 支持的标准日期时间类型格式规范如下表所示。
格式说明符 | 说 明 | 形 式 |
---|---|---|
d | 短日期格式 | YYYY-MM-dd |
D | 长日期格式 | YYYY年MM月dd日 |
f | 完整日期/时间格式(短时间) | YYYY年MM月dd日 hh:mm |
F | 完整日期/时间格式(长时间) | YYYY年MM月dd日 hh:mm:ss |
g | 常规日期/时间格式(短时间) | YYYY-MM-dd hh:mm |
G | 常规日期/时间格式(长时间) | YYYY-MM-dd hh:mm:ss |
M 或 m | 月/日格式 | MM月dd日 |
t | 短时间格式 | hh:mm |
T | 长时间格式 | hh:mm:ss |
Y 或 y | 年/月格式 | YYYY年MM月 |
注意,使用 string.Format 方法对日期时间类型数据进行格式化时,传入的参数必须为 DataTime 类型。
例如,使用上表中的标准日期时间类型格式规范对不同的日期时间类型数据进行格式化并输出,代码如下:
static void Main(string[] args) { DateTime strDate = DateTime.Now; //获取当前日期时间 //输出短日期格式 Console.WriteLine(string.Format("当前日期的短日期格式表示:{0:d}", strDate)); //输出长日期格式 Console.WriteLine(string.Format("当前日期的长日期格式表示:{0:D}", strDate)); Console.WriteLine();//换行 //输出完整日期/时间格式(短时间) Console.WriteLine(string.Format("当前日期时间的完整日期/时间格式(短时间) 表示:{0:f}", strDate)); //输出完整日期/时间格式(长时间) Console.WriteLine(string.Format("当前日期时间的完整日期/时间格式(长时间) 表示:{0:F}", strDate)); Console.WriteLine();//换行 //输出常规日期/时间格式(短时间) Console.WriteLine(string.Format("当前日期时间的常规日期/时间格式(短时间) 表示:{0:g}", strDate)); //输出常规日期/时间格式(长时间) Console.WriteLine(string.Format("当前日期时间的常规日期/时间格式(长时间)表示:{0:G}", strDate)); Console.WriteLine();//换行 //输出短时间格式 Console.WriteLine(string.Format("当前时间的短时间格式表示:{0:t}", strDate)); //输出长时间格式 Console.WriteLine(string.Format("当前时间的长时间格式表示:{0:T}", strDate)); Console.WriteLine(); //换行 //输出月/日格式 Console.WriteLine(string.Format("当前日期的月/日格式表示:{0:M}", strDate)); //输出年/月格式 Console.WriteLine(string.Format("当前日期的年/月格式表示:{0:Y}", strDate)); Console.ReadLine(); }第三行代码中,获取当前时间时用到了 DateTime 结构,该结构是 .NET Framework 自带的,表示时间上的一刻,通常以日期和当天的时间表示。DateTime.Now 用来获取计算机上的当前日期和时间。
程序运行结果为:
当前日期的短日期格式表示:2023-03-15
当前日期的长日期格式表示:星期三, 2023年3月15日
当前日期时间的完整日期/时间格式(短时间)表示:2023年3月15日 15:45
当前日期时间的完整日期/时间格式(长时间)表示:2023年3月15日 15:45:30
当前日期时间的常规日期/时间格式(短时间)表示:2023-03-15 15:45
当前日期时间的常规日期/时间格式(长时间)表示:2023-03-15 15:45:30
当前时间的短时间格式表示:15:45
当前时间的长时间格式表示:15:45:30
当前日期的月/日格式表示:3月15日
当前日期的年/月格式表示:2023年3月
通过在 ToString 方法中传入指定的“格式说明符”,也可以实现对数值类型数据和日期时间类型数据的格式化。例如,下面的代码分别使用 ToString 方法将数字 1298 格式化为货币形式、将当前日期格式化为年/月格式,代码如下。
int money = 1298; Console.WriteLine(money.ToString("C")); //使用ToString方法格式化数值类型数据 Console.WriteLine(money.ToString("000000")); //使用ToString方法格式化为6位数字 DateTime dTime = DateTime.Now; Console.WriteLine(dTime.ToString("Y")); //使用ToString方法格式化日期时间类型数据