VB.NET学习笔记:数据类型——数字、日期时间格式化(字符串)

数据应该以友好的格式呈现给用户,例如,电话号码可以存储为 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()

测试结果如图:
在这里插入图片描述
示例代码使用两个特定的数值类型(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"))

结果的呈现与操作电脑的控制面板中 “区域和语言选项” 项中的设置有关。以特定语言呈现的代码如下:

        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

二、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

如果要呈现特定“区域和语言选项”的字符串结果,请使用以下方法。

        '指定区域语言为"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

这里说明一下format参数的书写格式:"{0:格式说明符}",如"{0:d}"。
如果仅单纯的进行格式化笔者喜欢Object.ToString方法,简洁易懂,String.Format方法单纯的格式化文本不是他的目的,他重要用途是向一个字符串插入一个格式化了的字符串,如:

       '输出——今天是: 2019年1月9日,这是个特别的日子!
        Console.WriteLine(String.Format("今天是: {0:D},这是个特别的日子!", DateTime.Now))

测试结果如图:
在这里插入图片描述

三、附录

1、标准的数字格式说明符

标准数字格式字符串用于格式化通用数值类型。标准数字格式字符串采用 Axx 的形式,其中 A 是称为格式说明符的字母型字符, xx 是称为精度说明符的可选整数。 精度说明符的范围从 0 到 99,并且影响结果中的位数。
参考:标准数字格式字符串
在这里插入图片描述

2、自定义数字格式字符串

任何包含一个以上字母字符(包括空白)的数字格式字符串都被解释为自定义数字格式字符串。
参考:自定义数字格式字符串
在这里插入图片描述

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 格式字符串

参考:自定义的 TimeSpan 格式字符串

猜你喜欢

转载自blog.csdn.net/zyjq52uys/article/details/86139466