文章目录
- 一、格式说明符
- 1.1、数字格式说明符(适用于数值类型:int, double, decimal 等)
- 1. 标准数字格式
- 2. 自定义数字格式
- 1.2、日期时间格式说明符(适用于 DateTime, DateTimeOffset)
- 1. 标准日期时间格式
- 2. 自定义日期时间格式
- 1.3、枚举格式说明符(适用于 enum 类型)
- 1.4、组合格式示例
- 二、
- 三、
- 四、
一、格式说明符
C# 中的格式说明符用于格式化各种数据类型的字符串表示,主要分为以下几类,按数据类型分类列举并提供组合示例:
1.1、数字格式说明符(适用于数值类型:int, double, decimal 等)
1. 标准数字格式
-
C/c:货币格式(自动添加货币符号,受当前文化影响)Console.WriteLine($"{1234.56:C}"); // ¥1,234.56(中文环境) -
D/d:十进制整数格式(指定位数时不足补0)Console.WriteLine($"{123:D5}"); // 00123(固定5位) -
E/e:科学计数法(E为大写,e为小写)Console.WriteLine($"{1234.56:E3}"); // 1.235E+003(保留3位小数) -
F/f:固定小数位格式Console.WriteLine($"{1234.567:F2}"); // 1234.57(保留2位小数) -
G/g:通用格式(自动选择最简洁的表示)Console.WriteLine($"{1234.567:G4}"); // 1235(总位数4位,四舍五入) -
N/n:带千分位分隔符的数字Console.WriteLine($"{1234567:N2}"); // 1,234,567.00 -
P/p:百分比格式(数值乘以100并加%)Console.WriteLine($"{0.123:P1}"); // 12.3%(保留1位小数) -
X/x:十六进制格式(X大写,x小写)Console.WriteLine($"{255:X2}"); // FF(2位大写) Console.WriteLine($"{255:x4}"); // 00ff(4位小写)
2. 自定义数字格式
0:占位符(位数不足补0,超出则原样显示)#:占位符(位数不足不补0,超出则原样显示).:小数点,:千分位分隔符(可重复表示比例缩放,如,,表示除以100万)%:百分比(数值乘以100)\:转义字符(显示特殊符号)
示例:
// 整数部分至少3位,小数部分固定2位
Console.WriteLine($"{12.3:000.00}"); // 012.30// 整数部分可选,小数部分最多2位(不补0)
Console.WriteLine($"{1234.567:###.##}"); // 1234.57// 千分位分隔+比例缩放(除以1000,显示为"千")
Console.WriteLine($"{1234567:###,}k"); // 1235k(四舍五入到千位)// 混合百分比和自定义格式
Console.WriteLine($"{0.1234:00.0%}"); // 12.3%
1.2、日期时间格式说明符(适用于 DateTime, DateTimeOffset)
1. 标准日期时间格式
d:短日期(如2023/10/05)D:长日期(如2023年10月5日)t:短时间(如14:30)T:长时间(如14:30:45)f:完整日期+短时间(如2023年10月5日 14:30)F:完整日期+长时间(如2023年10月5日 14:30:45)g:常规日期+短时间(如2023/10/05 14:30)G:常规日期+长时间(如2023/10/05 14:30:45)s:可排序日期时间(如2023-10-05T14:30:45,ISO 8601)u:UTC可排序时间(如2023-10-05 14:30:45Z)
示例:
DateTime dt = new DateTime(2023, 10, 5, 14, 30, 45);
Console.WriteLine($"{dt:d}"); // 10/5/2023
Console.WriteLine($"{dt:G}"); // 10/5/2023 14:30:45
2. 自定义日期时间格式
y/yy/yyy/yyyy:年(如23/2023)M/MM:月(1-12/01-12)d/dd:日(1-31/01-31)h/hh:12小时制时(1-12/01-12)H/HH:24小时制时(0-23/00-23)m/mm:分(0-59/00-59)s/ss:秒(0-59/00-59)f/ff/fff:毫秒(1位/2位/3位)t:上午/下午(A/P)z/zz/zzz:时区偏移(如+08/+08:00)
示例:
DateTime dt = new DateTime(2023, 10, 5, 14, 30, 45, 123);
// 格式:年-月-日 时:分:秒.毫秒 时区
Console.WriteLine($"{dt:yyyy-MM-dd HH:mm:ss.fff zzz}");
// 输出:2023-10-05 14:30:45.123 +08:00
1.3、枚举格式说明符(适用于 enum 类型)
G/g:默认(显示枚举名, Flags 组合时用逗号分隔)F/f:Flags 组合时强制显示所有名称(即使未标记 Flags)D/d:显示枚举的基础数值X/x:显示基础数值的十六进制形式
示例:
[Flags]
enum MyEnum { A = 1, B = 2, C = 4 }
MyEnum val = MyEnum.A | MyEnum.C;Console.WriteLine($"{val:G}"); // A, C(名称组合)
Console.WriteLine($"{val:D}"); // 5(基础数值)
Console.WriteLine($"{val:X}"); // 00000005(十六进制)
1.4、组合格式示例
- 数字+日期组合:
var data = new { Amount = 1234.56, Date = new DateTime(2023, 10, 5) };
Console.WriteLine($"{data.Date:yyyy-MM-dd} 交易金额:{data.Amount:C2}");
// 输出:2023-10-05 交易金额:¥1,234.56
- 自定义数字+转义字符:
double ratio = 0.7532;
Console.WriteLine($"完成率:{ratio:00.00%}({ratio:0.##})");
// 输出:完成率:75.32%(0.75)
- 时间+毫秒精度:
DateTime dt = DateTime.Now;
Console.WriteLine($"当前时间:{dt:HH:mm:ss.fff}");
// 输出:当前时间:15:42:36.789
说明
- 格式说明符区分大小写(如
X和x分别对应大小写十六进制)。 - 可通过
IFormatProvider自定义文化(如指定CultureInfo.InvariantCulture避免地区差异)。 - 组合使用时,多个格式说明符需按类型规则拆分(如数字和日期需分别指定格式)。