数据应该以友好的格式呈现给用户,例如,电话号码可以存储为 8009999999 格式,但我们更喜欢这样来显示给用户: 800-999-9999。 这就需要我们对存储的数据进行格式化后再呈现出来。
格式设置是将类型(如数字、日期等)的值转换为字符串表示形式的过程,通常使得最终的字符串以友好的格式显示给用户,也可以理解为把其他数据类型以想要的格式转换成字符串。通常使用 Object.ToString方法、 String.Format 方法或StringBuilder.AppendFormat方法对数据进行格式设置。
官方帮助网页:设置 .NET 中类型的格式
一、Object.ToString方法
1、数字格式字符串
数字.ToString(format)
参数:format——String,标准或自定义的数值格式字符串。
返回:String,此实例的值的字符串表示形式,由 format 指定。
如(帮助页的示例代码):
Dim floating As Double = 10761.937554
Console.WriteLine("C: {0}",
floating.ToString("C"))
Console.WriteLine("E: {0}",
floating.ToString("E03"))
Console.WriteLine("F: {0}",
floating.ToString("F04"))
Console.WriteLine("G: {0}",
floating.ToString("G"))
Console.WriteLine("N: {0}",
floating.ToString("N03"))
Console.WriteLine("P: {0}",
(floating / 10000).ToString("P02"))
Console.WriteLine("R: {0}",
floating.ToString("R"))
Console.WriteLine()
Dim integral As Integer = 8395
Console.WriteLine("C: {0}",
integral.ToString("C"))
Console.WriteLine("D: {0}",
integral.ToString("D6"))
Console.WriteLine("E: {0}",
integral.ToString("E03"))
Console.WriteLine("F: {0}",
integral.ToString("F01"))
Console.WriteLine("G: {0}",
integral.ToString("G"))
Console.WriteLine("N: {0}",
integral.ToString("N01"))
Console.WriteLine("P: {0}",
(integral / 10000).ToString("P02"))
Console.WriteLine("X: 0x{0}",
integral.ToString("X"))
Console.WriteLine()
测试结果如图:
不同电脑格式化的结果可能不同,结果的呈现与操作电脑的控制面板中 “区域和语言选项” 项中的设置有关。如果你想呈现特定“区域和语言选项”的字符串结果,请使用以下方法。
数字.ToString(format,provider)
参数:format——String,标准或自定义的数值格式字符串;provider——IFormatProvider,一个提供区域性特定的格式设置信息的对象。
返回:String,此实例的值的字符串表示形式,由 format 和 provider 指定。
如以下代码使用 en-US 区域性设置数值的格式:
' Display string representations of numbers for en-us culture
Dim ci As New System.Globalization.CultureInfo("en-us")
' Output floating point values
Dim floating As Double = 10761.937554
Console.WriteLine("C: {0}",
floating.ToString("C", ci)) ' Displays "C: $10,761.94"
Console.WriteLine("E: {0}",
floating.ToString("E03", ci)) ' Displays "E: 1.076E+004"
Console.WriteLine("F: {0}",
floating.ToString("F04", ci)) ' Displays "F: 10761.9376"
Console.WriteLine("G: {0}",
floating.ToString("G", ci)) ' Displays "G: 10761.937554"
Console.WriteLine("N: {0}",
floating.ToString("N03", ci)) ' Displays "N: 10,761.938"
Console.WriteLine("P: {0}",
(floating / 10000).ToString("P02", ci)) ' Displays "P: 107.62 %"
Console.WriteLine("R: {0}",
floating.ToString("R", ci)) ' Displays "R: 10761.937554"
Console.WriteLine()
' Output integral values
Dim integral As Integer = 8395
Console.WriteLine("C: {0}",
integral.ToString("C", ci)) ' Displays "C: $8,395.00"
Console.WriteLine("D: {0}",
integral.ToString("D6")) ' Displays "D: 008395"
Console.WriteLine("E: {0}",
integral.ToString("E03", ci)) ' Displays "E: 8.395E+003"
Console.WriteLine("F: {0}",
integral.ToString("F01", ci)) ' Displays "F: 8395.0"
Console.WriteLine("G: {0}",
integral.ToString("G", ci)) ' Displays "G: 8395"
Console.WriteLine("N: {0}",
integral.ToString("N01", ci)) ' Displays "N: 8,395.0"
Console.WriteLine("P: {0}",
(integral / 10000).ToString("P02", ci)) ' Displays "P: 83.95 %"
Console.WriteLine("X: 0x{0}",
integral.ToString("X", ci)) ' Displays "X: 0x20CB"
Console.WriteLine()
- 36
- 37
- 38
- 39
- 40
测试结果如图:
示例代码使用两个特定的数值类型(Double 和 Int32),但对于任何一个其他数值基类型(Byte、SByte、Int16、Int32、Int64、UInt16、UInt32、UInt64、BigInteger、Decimal 和 Single)都将产生类似的结果。
2、日期和时间格式字符串
与数字格式字符串类似,直接上测试代码:
Dim date1 As Date = #4/10/2008#
Console.WriteLine(date1.ToString("d"))
- 1
- 2
结果的呈现与操作电脑的控制面板中 “区域和语言选项” 项中的设置有关。以特定语言呈现的代码如下:
Dim date1 As Date = #4/10/2008#
Console.WriteLine(date1.ToString("d", Globalization.DateTimeFormatInfo.InvariantInfo))
' Displays 04/10/2008
Console.WriteLine(date1.ToString("d",
Globalization.CultureInfo.CreateSpecificCulture("en-US")))
' Displays 4/10/2008
Console.WriteLine(date1.ToString("d",
Globalization.CultureInfo.CreateSpecificCulture("en-NZ")))
' Displays 10/04/2008
Console.WriteLine(date1.ToString("d",
Globalization.CultureInfo.CreateSpecificCulture("de-DE")))
' Displays 10.04.2008
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
二、String.Format方法
String.Format(format,arg0)
参数:format——String,任何格式设置;arg0——Object,要设置格式的对象。
返回:String,format 的副本,其中的任何格式项均替换为 arg0 的字符串表示形式。
如:
'数字格式字符串
Console.WriteLine(String.Format("{0:D10}", 79203159)) '输出结果 0079203159
'日期时间格式字符串
Dim date1 As Date = #4/10/2008#
Console.WriteLine(String.Format("{0:d}", date1)) '输出结果 2008/4/10
- 1
- 2
- 3
- 4
- 5
- 6
如果要呈现特定“区域和语言选项”的字符串结果,请使用以下方法。
'指定区域语言为"en-us"
Dim ci As New System.Globalization.CultureInfo("en-us")
'数字格式字符串
Console.WriteLine(String.Format(ci, "{0:c}", 79203159)) '输出结果 $79,203,159.00
'日期时间格式字符串
Dim date1 As Date = #4/10/2008#
Console.WriteLine(String.Format(ci, "{0:d}", date1)) '输出结果 4/10/2008
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
这里说明一下format参数的书写格式:"{0:格式说明符}",如"{0:d}"。
如果仅单纯的进行格式化笔者喜欢Object.ToString方法,简洁易懂,String.Format方法单纯的格式化文本不是他的目的,他重要用途是向一个字符串插入一个格式化了的字符串,如:
'输出——今天是: 2019年1月9日,这是个特别的日子!
Console.WriteLine(String.Format("今天是: {0:D},这是个特别的日子!", DateTime.Now))
- 1
- 2
1
2
测试结果如图:
三、附录
1、标准的数字格式说明符
标准数字格式字符串用于格式化通用数值类型。标准数字格式字符串采用 Axx 的形式,其中 A 是称为格式说明符的字母型字符, xx 是称为精度说明符的可选整数。 精度说明符的范围从 0 到 99,并且影响结果中的位数。
参考:标准数字格式字符串
2、自定义数字格式字符串
任何包含一个以上字母字符(包括空白)的数字格式vb.net教程字符串都被解释为自定义数字格式字符串。
参考:自定义数字格式字符串
在这里插入图片描述
3、标准日期和时间格式字符串
参考:标准日期和时间格式字符串
格式说明符——说明
“d”——短日期模式。
“D”——长日期模式。
“f”——完整日期/时间模式(短时间)。
“F”——完整日期/时间模式(长时间)。
“g”——常规日期/时间模式(短时间)。
“G”——常规日期/时间模式(长时间)。
“M”、“m”——月/日模式。
“O”、“o”——往返日期/时间模式。
“R”、“r”——RFC1123 模式。
“s”——可排序日期/时间模式。
“t”——短时间模式。
“T”——长时间模式。
“u”——通用可排序日期/时间模式。
“U”——通用完整日期/时间模式。
“Y”、“y”——年月模式。
任何其他单个字符——未知说明符。引发运行时 FormatException。
4、自定义日期和时间格式字符串
参考:自定义日期和时间格式字符串
5、标准 TimeSpan 格式字符串
参考:标准 TimeSpan 格式字符串
6、自定义的 TimeSpan 格式字符串