ASP.NET中格式化字符串

ASP.net从入门到精通-格式化字符串 ASP.net从入门到精通之格式化字符串 立即下载

摘自MSDN

一、标准数字格式字符串

标准数字格式字符串用于格式化通用数值类型。标准格式字符串采取“Axx”形式,其中“A”为单个字母字符(被称为格式说明符),“xx”是可选的整数(被称为精度说明符)。格式说明符必须是某个内置格式符。精度说明符的范围从 0 到 99,它控制有效位数或小数点右边零的个数。格式字符串不能包含空白。

如果格式字符串不包含某个标准格式说明符,则引发 FormatException 。例如,格式字符串“z”会由于包含一个字母字符而被解释为标准数字格式字符串,但字母字符不属于标准数字格式说明符,所以会引发 FormatException。任何不符合标准数字格式字符串定义的数字格式字符串都被解释为自定义数字格式字符串。格式字符串“c!”包含两个字母字符,因此被解释为自定义格式字符串,尽管字符“c”是标准数字格式说明符。

下表描述了标准数字格式字符串。请注意,这些格式说明符产生的输出字符串受“区域选项”控制面板中的设置的影响。使用不同设置的计算机会生成不同的输出字符串。

格式说明符 名称 说明

C 或 c

货币

数字转换为表示货币金额的字符串。转换由用于格式化数字的 NumberFormatInfo 对象的货币格式信息控制。精度说明符指示所需的小数位数。如果省略精度说明符,则使用 NumberFormatInfo 给定的默认货币精度。

D 或 d

十进制数

只有整型才支持此格式。数字转换为十进制数字 (0-9) 的字符串,如果数字为负,则前面加负号。精度说明符指示结果字符串中所需的最少数字个数。如果需要的话,则用零填充该数字的左侧,以产生精度说明符给定的数字个数。

E 或 e

科学计数法(指数)

数字转换为“-d.ddd…E+ddd”或“-d.ddd…e+ddd”形式的字符串,其中每个“d”表示一个数字 (0-9)。如果该数字为负,则该字符串以减号开头。小数点前总有一个数字。精度说明符指示小数点后所需的位数。如果省略精度说明符,则使用默认值,即小数点后六位数字。格式说明符的大小写指示在指数前加前缀“E”还是“e”。指数总是由正号或负号以及最少三位数字组成。如果需要,用零填充指数以满足最少三位数字的要求。

F 或 f

固定点

数字转换为“-ddd.ddd…”形式的字符串,其中每个“d”表示一个数字 (0-9)。如果该数字为负,则该字符串以减号开头。精度说明符指示所需的小数位数。如果忽略精度说明符,则使用 NumberFormatInfo 给定的默认数值精度。

G 或 g

常规

根据数字类型以及是否存在精度说明符,数字会转换为固定点或科学记数法的最紧凑形式。如果精度说明符被省略或为零,则数字的类型决定默认精度,如下表所示。

  • Byte 或 SByte:3

  • Int16 或 UInt16:5

  • Int32 或 UInt32:10

  • Int64 或 UInt64:19

  • Single:7

  • Double:15

  • Decimal:29

如果用科学记数法表示数字时指数大于 -5 而且小于精度说明符,则使用固定点表示法;否则使用科学记数法。如果要求有小数点,并且忽略尾部零,则结果包含小数点。如果精度说明符存在,并且结果的有效数字位数超过指定精度,则通过舍入删除多余的尾部数字。使用科学记数法时,如果格式说明符是“G”,结果的指数带前缀“E”;如果格式说明符是“g”,结果的指数带前缀“e”。

上述规则有一个例外:如果数字是 Decimal 而且省略精度说明符时。在这种情况下总使用固定点表示法并保留尾部零。

N 或 n

数字

数字转换为“-d,ddd,ddd.ddd…”形式的字符串,其中每个“d”表示一个数字 (0-9)。如果该数字为负,则该字符串以减号开头。小数点左边每三个数字之间插入一个千位分隔符。精度说明符指示所需的小数位数。如果忽略精度说明符,则使用 NumberFormatInfo 给定的默认数值精度。

P 或 p

百分比

数字转换为由 NumberFormatInfo.PercentNegativePattern 属性或 NumberFormatInfo.PercentPositivePattern 属性定义的、表示百分比的字符串。如果数字为负,则产生的字符串由 PercentNegativePattern 定义并以负号开头。已转换的数字乘以 100 以表示为百分比。精度说明符指示所需的小数位数。如果省略精度说明符,则使用 NumberFormatInfo 给定的默认数值精度。

R 或 r

往返过程

往返过程说明符保证转换为字符串的数值再次被分析为相同的数值。使用此说明符格式化数值时,首先使用常规格式对其进行测试:Double 使用 15 位精度,Single 使用 7 位精度。如果此值被成功地分析回相同的数值,则使用常规格式说明符对其进行格式化。但是,如果此值未被成功地分析为相同数值,则它这样格式化:Double 使用 17 位精度,Single 使用 9 位精度。虽然精度说明符可以追加到往返过程格式说明符,但它将被忽略。使用此说明符时,往返过程优先于精度。此格式仅受浮点型支持。

X 或 x

十六进制数

数字转换为十六进制数字的字符串。格式说明符的大小写指示对大于 9 的十六进制数字使用大写字符还是小写字符。例如,使用“X”产生“ABCDEF”,使用“x”产生“abcdef”。精度说明符指示结果字符串中所需的最少数字个数。如果需要的话,则用零填充该数字的左侧,以产生精度说明符给定的数字个数。只有整型才支持此格式。

下面的示例阐释如何使用标准数字格式说明符格式化数字基类型。

Visual Basic CopyCode image复制代码
Imports System
Imports System.Globalization
Imports System.Threading

Module Module1
    Sub Main()

        Thread.CurrentThread.CurrentCulture = New CultureInfo("en-us")
        Dim MyDouble As Double = 123456789

        Console.WriteLine("The examples in en-US culture:")
        Console.WriteLine(MyDouble.ToString("C"))
        Console.WriteLine(MyDouble.ToString("E"))
        Console.WriteLine(MyDouble.ToString("P"))
        Console.WriteLine(MyDouble.ToString("N"))
        Console.WriteLine(MyDouble.ToString("F"))

        Thread.CurrentThread.CurrentCulture = New CultureInfo("de-DE")
        Console.WriteLine("The examples in de-DE culture:")
        Console.WriteLine(MyDouble.ToString("C"))
        Console.WriteLine(MyDouble.ToString("E"))
        Console.WriteLine(MyDouble.ToString("P"))
        Console.WriteLine(MyDouble.ToString("N"))
        Console.WriteLine(MyDouble.ToString("F"))
    End Sub
End Module
C# CopyCode image复制代码
using System;
using System.Threading;
using System.Globalization;

class Class1
{
    static void Main()
    {
        Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");
            double MyDouble = 123456789;
        
        Console.WriteLine("The examples in en-US culture./n");
        Console.WriteLine(MyDouble.ToString("C"));
        Console.WriteLine(MyDouble.ToString("E"));
        Console.WriteLine(MyDouble.ToString("P"));
        Console.WriteLine(MyDouble.ToString("N"));
        Console.WriteLine(MyDouble.ToString("F"));

        Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
        Console.WriteLine("The examples in de-DE culture./n");
        Console.WriteLine(MyDouble.ToString("C"));
        Console.WriteLine(MyDouble.ToString("E"));
        Console.WriteLine(MyDouble.ToString("P"));
        Console.WriteLine(MyDouble.ToString("N"));
        Console.WriteLine(MyDouble.ToString("F"));
    }
}

上述代码示例将下列内容显示到控制台。请注意,运行该示例的计算机的区域和语言选项必须设置为适当区域性,才能正确显示欧元符号。

 CopyCode image复制代码
The examples in en-US culture:
$123,456,789.00
1.234568E+008
12,345,678,900.00%
123,456,789.00
123456789.00
The examples in de-DE culture:

123.456.789,00 €

 CopyCode image复制代码
1,234568E+008
12,345,678,900.00%
123.456.789,00
123456789,00

 

二、自定义格式字符串

如果标准数字格式说明符未提供所需的格式化类型,可以使用自定义格式字符串进一步增强字符串输出。标准格式字符串包含一个字母字符,后面可能会跟有数字序列(形成一个 0 到 99 的值);而所有其他格式字符串都是自定义格式字符串。

下表显示可以用于创建自定义数字格式字符串及其定义的字符。请注意,与当前线程关联的 NumberFormatInfo 对象的“区域选项”控制面板的设置会影响这些字符中的某些所产生的输出字符串。使用不同区域性的计算机将生成不同的输出字符串。

格式字符 名称 说明

0

零占位符

如果格式化的值在格式字符串中出现“0”的位置有一个数字,则此数字被复制到输出字符串中。小数点前最左边的“0”的位置和小数点后最右边的“0”的位置确定总在输出字符串中出现的数字范围。“00”说明符使得值被舍入到小数点前最近的数字,其中零位总被舍去。例如,用“00”格式化 34.5 将得到值 35。

#

数字占位符

如果格式化的值在格式字符串中出现“#”的位置有一个数字,则此数字被复制到输出字符串中。否则,输出字符串中的此位置不存储任何值。请注意,如果“0”不是有效数字,此说明符永不显示“0”字符,即使“0”是字符串中唯一的数字。如果“0”是所显示的数字中的有效数字,则显示“0”字符。“##”格式字符串使得值被舍入到小数点前最近的数字,其中零总被舍去。例如,用“##”格式化 34.5 将得到值 35。

.

小数点

格式字符串中的第一个“.”字符确定格式化的值中的小数点分隔符的位置;任何其他“.”字符被忽略。用作小数点分隔符的实际字符由控制格式化的 NumberFormatInfo 的 NumberDecimalSeparator 属性确定。

,

千位分隔符和数字比例换算

“,”字符有两种用途。首先,如果格式字符串在小数点(如果有)左边的两个数字占位符(0 或 #)之间包含“,”字符,则输出将在小数点分隔符左边的每三个数字之间插入千位分隔符。输出字符串中用作小数点分隔符的实际字符由控制格式化的当前 NumberFormatInfo 的 NumberGroupSeparator 属性确定。

其次,如果格式字符串在紧邻小数点的左侧包含一个或多个“,”字符,则数字在格式化之前将被“,”字符数除然后乘以 1000。例如,格式字符串“0,,”将 100,000,000 简单表示为 100。使用“,”字符指示比例换算在格式化数字中不包括千位分隔符。因此,若要将数字缩小 1,000,000 倍并插入千位分隔符,应使用格式字符串“#,##0,,”。

%

百分比占位符

在格式字符串中出现“%”字符将导致数字在格式化之前乘以 100。适当的符号插入到数字本身在格式字符串中出现“%”的位置。使用的百分比字符由当前的 NumberFormatInfo 类确定。

E0

E+0

E-0

e0

e+0

e-0

科学计数法

如果“E”、“E+”、“E-”、“e”、“e+”或“e-”中的任何一个字符串出现在格式字符串中,而且后面紧跟至少一个“0”字符,则数字用科学计数法来格式化,在数字和指数之间插入“E”或“e”。跟在科学计数法指示符后面的“0”字符数确定指数输出的最小位数。“E+”和“e+”格式指示符号字符(正号或负号)应总是置于指数前面。“E”、“E-”、“e”或“e-”格式指示符号字符仅置于负指数前面。

/

转义符

在 C# 和 C++ 中,反斜杠字符使格式字符串中的下一个字符被解释为转义序列。它与传统的格式化序列一起使用,如“/n”(换行)。

在某些语言中,转义符本身用作文本时必须跟在转义符之后。否则,编译器将该字符理解为转义符。使用字符串“//”显示“/”。

请注意,Visual Basic 中不支持此转义符,但是 ControlChars 提供相同的功能。

'ABC'

"ABC"

字符串

引在单引号或双引号中的字符被原样复制到输出字符串中,而且不影响格式化。

;

部分分隔符

“;”字符用于分隔格式字符串中的正数、负数和零各部分。

其他

所有其他字符

所有其他字符以文本形式复制到输出字符串中它们出现的位置。

请注意,对于固定点格式字符串(不包含“E0”、“E+0”、“E-0”、“e0”、“e+0”或“e-0”的字符串),数字被舍入为与小数点右边的数字占位符数目相同的小数位数。如果格式字符串不包含小数点,数字被舍入为最接近的整数。如果数字位数多于小数点左边数字占位符的个数,多余的数字被复制到输出字符串中紧挨着第一个数字占位符的前面。

可以根据值为正、为负还是为零来为字符串应用不同的格式化。为产生这种行为,自定义格式字符串可以包含最多三个用分号分隔的部分:

  • 一个部分:格式字符串应用于所有值。

  • 两个部分:第一部分应用于正值和零,第二部分应用于负值。如果要格式化的数字为负,但根据第二部分中的格式舍入后为零,则最终的零根据第一部分进行格式化。

  • 三个部分:第一部分应用于正值,第二部分应用于负值,第三部分应用于零。第二部分可能为空(分号间没有任何内容),在这种情况下,第一部分应用于所有非零值。如果要格式化的数字为非零值,但根据第一部分或第二部分中的格式舍入后为零,则最终的零根据第三部分进行格式化。

格式化最终值时,此类型的格式化忽略所有先前存在的与数字关联的格式化。例如,使用部分分隔符时,显示的负值永远不带负号。如果您希望格式化后的最终值带有负号,则应明确包含负号,让它作为自定义格式说明符的组成部分。下面的示例阐释如何使用部分分隔符产生格式化字符串。

Visual Basic CopyCode image复制代码
Dim MyPos As Double = 19.95

Dim MyNeg As Double = -19.95

Dim MyZero As Double = 0

Dim MyString As String = MyPos.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: $19.95.

MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: ($19.95).
' The minus sign is omitted by default.

MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: Zero.
C# CopyCode image复制代码
double MyPos = 19.95, MyNeg = -19.95, MyZero = 0.0;

string MyString = MyPos.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: $19.95.

MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: ($19.95).
// The minus sign is omitted by default.

MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: Zero.

下面的示例说明自定义数字格式化。

Visual Basic CopyCode image复制代码
Dim myDouble As Double = 1234567890
Dim myString As String = myDouble.ToString( "(###) ### - ####" )
' The value of myString is "(123) 456 – 7890".

Dim MyInt As Integer = 42
MyString = MyInt.ToString( "My Number " + ControlChars.Lf + "= #" )
' In the U.S. English culture, MyString has the value: 
' "My Number
' = 42".

C# CopyCode image复制代码
Double myDouble = 1234567890;
String myString = myDouble.ToString( "(###) ### - ####" );
// The value of myString is "(123) 456 – 7890".

int  MyInt = 42;
MyString = MyInt.ToString( "My Number /n= #" );
// In the U.S. English culture, MyString has the value: 
// "My Number
// = 42".
三、标准 DateTime 格式字符串

标准 DateTime 格式字符串包含下表中的一个格式说明符字符。如果下表中没有该格式说明符,将引发运行时异常。如果格式字符串在长度上比单个字符长(即使多出的字符是空白),则格式字符串被解释为自定义格式字符串。

请注意,这些格式说明符产生的输出字符串受“区域选项”控制面板中的设置的影响。计算机的区域性设置或日期和时间设置不同,将生成不同的输出字符串。

格式字符串显示的时间和日期分隔符由与当前区域性的 DateTimeFormat 属性关联的 DateSeparator 和 TimeSeparator 字符定义。然而,如果 InvariantCulture 被“r”、“s”和“u”说明符引用,与 DateSeparator 和 TimeSeparator 字符关联的字符不随当前区域性更改。

下表描述了用来格式化 DateTime 对象的标准格式说明符。

格式说明符 名称 说明

d

短日期模式

显示由与当前线程关联的 DateTimeFormatInfo.ShortDatePattern 属性定义的模式或者由指定格式提供程序定义的模式。

D

长日期模式

显示由与当前线程关联的 DateTimeFormatInfo.LongDatePattern 属性定义的模式或者由指定格式提供程序定义的模式。

t

短时间模式

显示由与当前线程关联的 DateTimeFormatInfo.ShortTimePattern 属性定义的模式或者由指定格式提供程序定义的模式。

T

长时间模式

显示由与当前线程关联的 DateTimeFormatInfo.LongTimePattern 属性定义的模式或者由指定格式提供程序定义的模式。

f

完整日期/时间模式(短时间)

显示长日期和短时间模式的组合,由空格分隔。

F

完整日期/时间模式(长时间)

显示由与当前线程关联的 DateTimeFormatInfo.FullDateTimePattern 属性定义的模式或者由指定格式提供程序定义的模式。

g

常规日期/时间模式(短时间)

显示短日期和短时间模式的组合,由空格分隔。

G

常规日期/时间模式(长时间)

显示短日期和长时间模式的组合,由空格分隔。

M 或 m

月日模式

显示由与当前线程关联的 DateTimeFormatInfo.MonthDayPattern 属性定义的模式或者由指定格式提供程序定义的模式。

R 或 r

RFC1123 模式

显示由与当前线程关联的 DateTimeFormatInfo.RFC1123Pattern 属性定义的模式或者由指定格式提供程序定义的模式。这是定义的标准,并且属性是只读的;因此,无论所使用的区域性或所提供的格式提供程序是什么,它总是相同的。属性引用 CultureInfo.InvariantCulture 属性并遵照自定义模式“ddd, dd MMM yyyy HH:mm:ss G/MT”。请注意,“GMT”中的“M”需要转义符,因此它不被解释。格式化并不修改 DateTime 的值,所以您必须在格式化之前将值调整为 GMT。

s

可排序的日期/时间模式;符合 ISO 8601

显示由与当前线程关联的 DateTimeFormatInfo.SortableDateTimePattern 属性定义的模式或者由指定格式提供程序定义的模式。属性引用 CultureInfo.InvariantCulture 属性,格式遵照自定义模式“yyyy-MM-ddTHH:mm:ss”。

u

通用的可排序日期/时间模式

显示由与当前线程关联的 DateTimeFormatInfo.UniversalSortableDateTimePattern 属性定义的模式或者由指定格式提供程序定义的模式。因为它是定义的标准,并且属性是只读的,因此无论区域性或格式提供程序是什么,模式总是相同的。格式化遵照自定义模式“yyyy-MM-dd HH:mm:ssZ”。格式化日期和时间时不进行时区转换;所以,请在使用格式说明符之前将本地日期和时间转换为通用时间。

U

通用的可排序日期/时间模式

显示由与当前线程关联的 DateTimeFormatInfo.FullDateTimePattern 属性定义的模式或者由指定格式提供程序定义的模式。显示的时间为通用时间而不是本地时间,等效于 DateTime 值。

Y 或 y

年月模式

显示由与当前线程关联的 DateTimeFormatInfo.YearMonthPattern 属性定义的模式或者由指定格式提供程序定义的模式。

任何其他单个字符

未知说明符

   

下面的示例说明了标准格式字符串如何与 DateTime 对象一起使用。

Visual Basic CopyCode image复制代码
Dim dt As DateTime = DateTime.Now
Dim dfi As DateTimeFormatInfo = New DateTimeFormatInfo()
Dim ci As CultureInfo = New CultureInfo("de-DE")

' Make up a new custom DateTime pattern, for demonstration.
dfi.MonthDayPattern = "MM-MMMM, ddd-dddd"

' Use the DateTimeFormat from the culture associated 
' with the current thread.

Console.WriteLine( dt.ToString("d") )  
Console.WriteLine( dt.ToString("m") )

' Use the DateTimeFormat from the specific culture passed.
Console.WriteLine( dt.ToString("d", ci ) )

' Use the settings from the DateTimeFormatInfo object passed.
Console.WriteLine( dt.ToString("m", dfi ) )

' Reset the current thread to a different culture.
Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-BE")
Console.WriteLine( dt.ToString("d") )
C# CopyCode image复制代码
DateTime dt = DateTime.Now;
DateTimeFormatInfo dfi = new DateTimeFormatInfo();
CultureInfo ci = new CultureInfo("de-DE");

// Make up a new custom DateTime pattern, for demonstration.
dfi.MonthDayPattern = "MM-MMMM, ddd-dddd";

// Use the DateTimeFormat from the culture associated 
// with the current thread.
Console.WriteLine( dt.ToString("d") );  
Console.WriteLine( dt.ToString("m") );

// Use the DateTimeFormat from the specific culture passed.
Console.WriteLine( dt.ToString("d", ci ) );

// Use the settings from the DateTimeFormatInfo object passed.
Console.WriteLine( dt.ToString("m", dfi ) );

// Reset the current thread to a different culture.
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-BE");
Console.WriteLine( dt.ToString("d") );

 

四、自定义 DateTime 格式

通过使用自定义 DateTime 格式说明符来创建自己的自定义 DateTime 格式字符串,您可以更好地控制格式化 DateTime 对象 的方式。组合一个或多个自定义格式说明符,以构造可生成您喜欢的输出的 DateTime 格式化模式。实际上,大多数的标准 DateTime 格式说明符都是在当前适用的 DateTimeFormatInfo 类 中指定的格式化模式的别名。

下表描述了自定义格式说明符以及它们产生的结果。这些格式说明符的输出受“区域选项”控制面板中的当前区域性和设置的影响。

格式说明符 说明

d

显示月份的当前日期,以 1 到 31 之间的一个数字表示,包括 1 和 31。如果日期只有一位数字 (1-9),则它显示为一位数字。

请注意,如果“d”格式说明符单独使用,没有其他自定义格式字符串,则它被解释为标准短日期模式格式说明符。如果“d”格式说明符与其他自定义格式说明符或者“%”字符一起传递,则它被解释为自定义格式说明符。

dd

显示月份的当前日期,以 1 到 31 之间的一个数字表示,包括 1 和 31。如果日期只有一位数字 (1-9),则将其格式化为带有前导 0 (01-09)。

ddd

显示指定的 DateTime 的日期部分缩写名称。如果未提供特定的有效格式提供程序(实现具有预期属性的 IFormatProvider 的非空对象),则使用 DateTimeFormat 的 AbbreviatedDayNames 属性及其与当前所使用线程关联的当前区域性。否则,使用来自指定格式提供程序的 AbbreviatedDayNames 属性。

dddd(外加任意数量的附加“d”字符)

显示指定的 DateTime 的日期全名。如果未提供特定的有效格式提供程序(一个非空对象,可实现具有预期属性的 IFormatProvider),则使用 DateTimeFormat 的 DayNames 属性及其与当前所使用线程关联的当前区域性。否则,使用来自指定格式提供程序的 DayNames 属性。

f

显示秒部分的最高有效位。

请注意,如果“f”格式说明符单独使用,没有其他自定义格式字符串,则它被解释为完整的(长日期 + 短时间)格式说明符。如果“f”格式说明符与其他自定义格式说明符或“%”字符一起传递,则它被解释为自定义格式说明符。

使用 System.DateTime.ParseExact 方法进行分析时,所使用的“f”格式说明符的位数指示要分析的秒部分的最高有效位的位数。

ff

显示秒部分的两个最高有效位。

fff

显示秒部分的三个最高有效位。

ffff

显示秒部分的四个最高有效位。

fffff

显示秒部分的五个最高有效位。

ffffff

显示秒部分的六个最高有效位。

fffffff

显示秒部分的七个最高有效位。

F

显示秒部分的最高有效位。如果该位为零,则不显示任何信息。

使用 System.DateTime.ParseExact(System.String,System.String,System.IFormatProvider) 方法进行分析时,所使用的“F”格式说明符的位数指示要分析的秒部分的最高有效位最大数。

FF

显示秒部分的两个最高有效位。但不显示尾随零(或两个零位)。

FFF

显示秒部分的三个最高有效位。但不显示尾随零(或三个零位)。

FFFF

显示秒部分的四个最高有效位。但不显示尾随零(或四个零位)。

FFFFF

显示秒部分的五个最高有效位。但不显示尾随零(或五个零位)。

FFFFFF

显示秒部分的六个最高有效位。但不显示尾随零(或六个零位)。

FFFFFFF

显示秒部分的七个最高有效位。但不显示尾随零(或七个零位)。

g 或 gg(外加任意数量的附加“g”字符)

显示指定的 DateTime 的年代部分(例如 A.D.)。如果未提供特定的有效格式提供程序(一个非空对象,可实现具有预期属性的 IFormatProvider),则年代由与 DateTimeFormat 关联的日历及其与当前线程关联的当前区域性确定。

请注意,如果“g”格式说明符单独使用,没有其他自定义格式字符串,则它被解释为标准常规格式说明符。如果“g”格式说明符与其他自定义格式说明符或“%”字符一起传递,则它被解释为自定义格式说明符。

h

以 1 到 12 范围中的一个数字显示指定的 DateTime 的小时数,该小时数表示自午夜(显示为 12)或中午(也显示为 12)后经过的整小时数。如果单独使用这种格式,则无法区别某一小时是中午以前还是中午以后的时间。如果该小时是单个数字 (1-9),则它显示为单个数字。显示小时时不发生任何舍入。例如,DateTime 为 5:43 时返回 5。

hh, hh(外加任意数量的附加“h”字符)

以 1 到 12 范围中的一个数字显示指定的 DateTime 的小时数,该小时数表示自午夜(显示为 12)或中午(也显示为 12)后经过的整小时数。如果单独使用这种格式,则无法区别某一小时是中午以前还是中午以后的时间。如果该小时是单个数字 (1-9),则将其格式化为前面带有 0 (01-09)。

H

以 0 到 23 范围中的一个数字显示指定的 DateTime 的小时数,该小时数表示自午夜(显示为 0)后经过的整小时数。如果该小时是单个数字 (0-9),则它显示为单个数字。

HH, HH(外加任意数量的附加“H”字符)

以 0 到 23 范围中的一个数字显示指定的 DateTime 的小时数,该小时数表示自午夜(显示为 0)后经过的整小时数。如果该小时是单个数字 (0-9),则将其格式化为前面带有 0 (01-09)。

m

以 0 到 59 范围中的一个数字显示指定的 DateTime 的分钟数,该分钟数表示自上一小时后经过的整分钟数。如果分钟是一位数字 (0-9),则它显示为一位数字。

请注意,如果“m”格式说明符单独使用,没有其他自定义格式字符串,则它被解释为标准的月日模式格式说明符。如果“m”格式说明符与其他自定义格式说明符或“%”字符一起传递,则它被解释为自定义格式说明符。

mm, mm(外加任意数量的附加“m”字符)

以 0 到 59 范围中的一个数字显示指定的 DateTime 的分钟数,该分钟数表示自上一小时后经过的整分钟数。如果分钟是一位数字 (0-9),则将其格式化为带有前导 0 (01-09)。

M

显示月份,以 1 到 12 之间(包括 1 和 12)的一个数字表示。如果月份是一位数字 (1-9),则它显示为一位数字。

请注意,如果“M”格式说明符单独使用,没有其他自定义格式字符串,则它被解释为标准的月日模式格式说明符。如果“M”格式说明符与其他自定义格式说明符或“%”字符一起传递,则它被解释为自定义格式说明符。

MM

显示月份,以 1 到 12 之间(包括 1 和 12)的一个数字表示。如果月份是一位数字 (1-9),则将其格式化为带有前导 0 (01-09)。

MMM

显示指定的 DateTime 的月部分缩写名称。如果未提供特定的有效格式提供程序(一个非空对象,可实现具有预期属性的 IFormatProvider),则使用 DateTimeFormat 的 AbbreviatedMonthNames 属性及其与当前线程关联的当前区域性。否则,使用来自指定格式提供程序的 AbbreviatedMonthNames 属性。

MMMM

显示指定的 DateTime 的月的全名。如果未提供特定的有效格式提供程序(一个非空对象,可实现具有预期属性的 IFormatProvider),则使用 DateTimeFormat 的 MonthNames 属性及其与当前线程关联的当前区域性。否则,使用来自指定格式提供程序的 MonthNames 属性。

s

以 0 到 59 范围中的一个数字显示指定的 DateTime 的秒数,该秒数表示自上一分钟后经过的整秒数。如果秒是一位数字 (0-9),则它仅显示为一位数字。

请注意,如果“s”格式说明符单独使用,没有其他自定义格式字符串,则它被解释为标准的可排序日期/时间模式格式说明符。如果“s”格式说明符与其他自定义格式说明符或“%”字符一起传递,则它被解释为自定义格式说明符。

ss, ss(外加任意数量的附加“s”字符)

以 0 到 59 范围中的一个数字显示指定的 DateTime 的秒数,该秒数表示自上一分钟后经过的整秒数。如果秒是一位数字 (0-9),则将其格式化为带有前导 0 (01-09)。

t

显示指定的 DateTime 的 A.M./P.M. 指示项的第一个字符。如果未提供特定的有效格式提供程序(一个非空对象,可实现具有预期属性的 IFormatProvider),则使用 DateTimeFormat 的 AMDesignator (或 PMDesignator )属性及其与当前线程关联的当前区域性。否则,使用来自指定 IFormatProvider 的 AMDesignator(或 PMDesignator)属性。如果对于指定的 DateTime 所经过的总整小时数小于 12,则使用 AMDesignator。否则,使用 PMDesignator。

请注意,如果“t”格式说明符单独使用,没有其他自定义格式字符串,则它被解释为标准的长时间模式格式说明符。如果“t”格式说明符与其他自定义格式说明符或“%”字符一起传递,则它被解释为自定义格式说明符。

tt, tt(外加任意数量的附加“t”字符)

显示指定的 DateTime 的 A.M./P.M. 指示项。如果未提供特定的有效格式提供程序(一个非空对象,可实现具有预期属性的 IFormatProvider),则使用 DateTimeFormat 的 AMDesignator(或 PMDesignator)属性及其与当前线程关联的当前区域性。否则,使用来自指定 IFormatProvider 的 AMDesignator(或 PMDesignator)属性。如果对于指定的 DateTime 所经过的总整小时数小于 12,则使用 AMDesignator。否则,使用 PMDesignator。

y

最多用两位数字显示指定的 DateTime 的年份。忽略年的前两位数字。如果年份是一位数字 (1-9),则它显示为一位数字。

请注意,如果“y”格式说明符单独使用,没有其他自定义格式字符串,则它被解释为标准短日期模式格式说明符。如果“y”格式说明符与其他自定义格式说明符或“%”字符一起传递,则它被解释为自定义格式说明符。

yy

最多用两位数字显示指定的 DateTime 的年份。忽略年的前两位数字。如果年份是一位数字 (1-9),则将其格式化为带有前导 0 (01-09)。

yyyy

显示指定的 DateTime 的年份部分(包括纪元)。如果年份长度小于四位,则按需要在前面追加零以使显示的年份长度达到四位。

z

仅以整小时数为单位显示系统当前时区的时区偏移量。偏移量总显示为带有前导符号(零显示为“+0”),指示早于格林威治时间 (+) 或迟于格林威治时间 (-) 的小时数。值的范围是 -12 到 +13。如果偏移量为一位数 (0-9),则将其显示为带有合适前导符号的一位数。时区设置以 +X 或 –X 的形式指定,其中 X 是相对于 GMT 的小时偏差。显示的偏差受夏时制的影响。

zz

仅以整小时数为单位显示系统当前时区的时区偏移量。偏移量总显示为带有前导或尾随符号(零显示为“+00”),指示早于格林威治时间 (+) 或迟于格林威治时间 (-) 的小时数。值范围为 -12 到 +13。如果偏移量为一位数 (0-9),则将其格式化为前面带有 0 (01-09) 并带有适当的前导符号。时区设置以 +X 或 –X 的形式指定,其中 X 是相对于 GMT 的小时偏差。显示的偏差受夏时制的影响。

zzz, zzz(外加任意数量的附加“z”字符)

以小时和分钟为单位显示系统当前时区的时区偏移量。偏移量总是显示为带有前导或尾随符号(零显示为“+00:00”),指示早于格林威治时间 (+) 或迟于格林威治时间 (-) 的小时数。值范围为 -12:00 到 +13:00。如果偏移量为一位数 (0-9),则将其格式化为前面带有 0 (01-09) 并带有适当的前导符号。时区设置以 +X 或 –X 的形式指定,其中 X 是相对于 GMT 的小时偏差。显示的偏差受夏时制的影响。

:

时间分隔符。

/

日期分隔符。

"

带引号的字符串。显示转义符 (/) 之后两个引号之间的任何字符串的文本值。

'

带引号的字符串。显示两个“'”字符之间的任何字符串的文本值。

%c

其中 c 既是标准格式说明符又是自定义格式说明符,显示与格式说明符关联的自定义格式模式。

请注意,如果格式说明符作为单个字符来单独使用,它将被解释成标准格式说明符。只有包含两个或更多字符的格式说明符被解释为自定义格式说明符。说明符可以被同时定义为标准和自定义格式说明符,要显示此种说明符的自定义格式,请在说明符之前加“%”符号。

/c

其中 c 是任意字符,转义符将下一个字符显示为文本。在此上下文中,转义符不能用于创建转义序列(如“/n”表示换行)。

任何其他字符

其他字符作为文本直接写入输出字符串。

向 DateTime.ToString 传递自定义模式时,模式必须至少为两个字符长。如果只传递“d”,则公共语言运行库将其解释为标准格式说明符,这是因为所有单个格式说明符都被解释为标准格式说明符。如果传递单个“h”,则引发异常,原因是不存在标准的“h”格式说明符。若要只使用单个自定义格式进行格式化,请在说明符的前面或后面添加一个空格。例如,格式字符串“h”被解释为自定义格式字符串。

下面的示例阐释如何从 DateTime 创建自定义格式化字符串。此示例假定当前区域性是美国英语 (en-US)。

Visual Basic CopyCode image复制代码
Dim MyDate As New DateTime(2000, 1, 1, 0, 0, 0)
Dim MyString As String = MyDate.ToString("dddd - d - MMMM")
' In the U.S. English culture, MyString has the value: 
' "Saturday - 1 - January".
MyString = MyDate.ToString("yyyy gg")
' In the U.S. English culture, MyString has the value: "2000 A.D.".
C# CopyCode image复制代码
DateTime MyDate = new DateTime(2000, 1, 1, 0, 0, 0);
String MyString = MyDate.ToString("dddd - d - MMMM");
// In the U.S. English culture, MyString has the value: 
// "Saturday - 1 - January".
MyString = MyDate.ToString("yyyy gg");
// In the U.S. English culture, MyString has the value: "2000 A.D.".
asp代码格式化工具 还在为ASP代码混乱发愁吗,试试这个小软件吧。 立即下载

相关推荐

远程桌面项目

远程桌面项目

weixin_41560737的博客 1934

【字符串格式化】MessageFormat格式化时,单引号导致占位符失效

使用MessageFormat格式化字符串时,单引号导致的占位符失效问题

只剩渣了的博客 2657

Harness设计——Anthropic实战:规划器、生成器、评估器三角色协作详解

本文探讨了如何通过多智能体架构突破AI编码的瓶颈问题。文章首先分析了当前AI编码面临的两大核心挑战:上下文窗口限制导致的连贯性丧失,以及自我评估机制缺失引发的质量判断偏差。针对这些问题,作者提出了基于生成对抗网络(GAN)灵感的解决方案,设计了三智能体系统:规划器负责需求分析,生成器执行编码任务,评估器进行质量审查。 实验表明,在前端设计任务中,通过制定可量化的评分标准(设计质量、原创性、工艺、功能性)并建立生成-评估反馈循环,能显著提升输出质量。这种架构随后被扩展到全栈开发领域,采用类似敏捷开发的&quo

oe1019的专栏 868

ASP.NET Core 2.2 : 二十一. 内容协商与自定义IActionResult和格式化类

上一章的结尾留下了一个问题:同样是ObjectResult,在执行的时候又是如何被转换成string和JSON两种格式的呢? 本章来解答这个问题,这里涉及到一个名词:“内容协商”。除了这个,本章将通过两个例子来介绍如何自定义IActionResult和格式化类。(ASP.NET Core 系列目录) 一、内容协商 依然以返回Book类型的Action为例,看看它是怎么被转换为JSO...

weixin_30915951的博客 893

告别Visual Studio!用MSYS2+GCC+CMake在Windows上打造Linux式C++开发环境(保姆级避坑)

本文详细介绍了如何在Windows上使用MSYS2+GCC+CMake搭建Linux式C++开发环境,替代Visual Studio。从MSYS2的安装配置、MinGW-w64 GCC工具链的部署,到CMake项目的创建与构建,提供了保姆级教程和常见问题解决方案,帮助开发者高效过渡到命令行开发模式。

weixin_30298497的博客 325

CM-GAI:基于连续介质力学与最优传输的数据生成新范式

在数据驱动的工程与科学研究中,如何利用有限的物理数据实现可靠预测是核心挑战。传统方法如深度神经网络,在数据稀缺时往往泛化能力不足且缺乏物理一致性。为解决此问题,一种融合物理原理与数据驱动的新范式应运而生。其核心思想是将数据分布的变化类比为连续介质在广义力驱动下的力学变形过程,通过最优传输理论为分布变换提供最优路径的度量。这种方法将物理规律(如质量守恒、运动方程)作为硬约束嵌入模型,确保了生成过程的物理可解释性。物理信息神经网络(PINNs)则被用作高效求解器,处理高维特征空间中的复杂控制方程。在工程实践中,

weixin_30607029的博客 608

asp以千分位格式显示数字

很多时候我在处理数值的时候需要把数值变成千分位的格式,即每三个数加一个",",下面是ASP格式化数值的函数。 < % function comma(str) '判断是否为数值 if not(isnumeric(str)) or str = 0 then result = 0 '判断数值长度 elseif len(fix(str)) < 4 then result = str else pos = instr(1,str,".") '判断是否有小数点 if pos > 0 t

明凯博客 798

【QGIS】利用“创建网格”功能实现区域等距分割与坐标转换实战

本文详细介绍了如何在QGIS中使用“创建网格”工具实现区域等距分割。通过实战演示,将北京市行政区划切割为150米正方形网格,并重点讲解了关键步骤:选择投影坐标系EPSG:3857以确保网格尺寸精确,以及将结果转换为常用的WGS84经纬度坐标。文章还涵盖了进阶技巧与常见问题解决方案,帮助用户高效完成空间网格化分析任务。

weixin_29232507的博客 96

ASP.Net中格式化字符串

使用 DataFormatString 属性来提供列中各项的自定义格式。数据格式字符串由以冒号分隔的两部分组成,形式为 { A : Bxx }。例如,格式化字符串 {0:F2} 将显示带两位小数的定点数。 注意 整个字符串必须放在大括号内,表示它是格式字符串,而不是实际字符串。大括号外的任何文本均显示为实际文本。 冒号前的值(常规示例中为 A)指定在从零开始的参数列表中的参数索引。

theageofe的专栏 754

华为OD机试 - 计算误码率(Python/JS/C/C++ 双机位C卷 100分)

移动通信 网络中的误码率主要是指比特误码率,其计算公式如下:比特误码率 = 错误比特数 / 传输总比特数,为了简单,我们引入字符串来表示误码通信的信息,一个字符错误了,就认为出现了一个误码。我们需要将这两个压缩字符串解压成实际的字符序列,然后逐位比较它们,统计误码(不同字符)的数量。题目给出两个经过压缩编码的字符串,通过解压缩后需要判断两个字符串在解压后的误码率,即对应位置不同的字符数量占总字符数量的比例。输入一个标准的字符串,和一个传输前的字符串,计算误码率。两个解压后的字符串完全相同,没有错误字符。

学Java,找哪吒 2195

LDRA Testbed软件静态分析_操作指南

从本文起,将开始LDRA Testbed(TBrun)教程的系列文章,包括软件静态分析、单元测试、集成测试,以及基于Testbed的自动化工具开发、持续集成、常见问题解答等。LDRA公司是专业的软件测试工具与测试技术、咨询服务提供者,其总部位于英国利物浦。其旗舰产品Testbed/TBrun功能全面、易于使用,不仅适合于主机平台软件测试,同时适合于嵌入式软件测试。不仅能进行软件静态测试,还能进行软件单元测试、软件集成测试,在白盒测试领域运用比较广泛。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1万+

ASP.NET 格式化字符串

DataFormatString属性:{0:Bxx} B为取值类型格式字符 说明 C  以货币格式显示数值。 D  以十进制格式显示数值。 E  以科学记数法(指数)格式显示数值。 F  以固定格式显示数值。 G  以常规格式显示数值。 N  以数字格式显示数值。 X  以十六进制格式显示数值。 注意   除 X 以指定的大小写形式显示十六进制字符之外,其他格式字符不区分大小写。格式字符后的值(常

904

【2024年华为秋招-12月25日-第三题(300分)- PCB印刷电路板布线】(题目+思路+Java&C++&Python解析+在线测试)

在PCB印刷电路板设计中,器件之间的连线需要避免线路的阻抗值增大、而且赛件之间还有别的器件和别的干扰源,在布线时我们希望受到的干扰尽量小。现将电路板简化成一个M×N的矩阵,每个位置(单元格)的值表示其源干扰度。如果单元格的值为0,表示此位置没有干扰源;如果单元格的值为非0,则表示此位置是干扰源,其值为源干扰度。连线经过干扰源或干扰源附近会增加连线的总干扰度。位置Axy的干扰源的源干扰度为dd01、若连线经过位置Axy,则其总干扰度会增加d;2、若连线经过离位置A。

m0_73659489的博客 344

Asp.net日期字符串格式化显示方法

可以这样写:date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo)  如此类推.  下面列出一些Asp.net中具体的日期格式化用法:  ============================================  1.绑定时格式化日期方法:      2.数据控件如DataGrid/DataLis

BlaCJar的专栏 2542

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Asp.net日期字符串格式化显示方法[转]

Asp.net日期字符串格式化显示方法[转] 在使用Asp.net的过程中,我们经常需要对时间日期进行转换,达到不同的显示效果。默认格式为:2006-6-6 14:33:34 ,如果要换成成200606,06-2006,2006-6-6或更多的格式该怎么办呢?   这里将

zjb1989923的专栏 631

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

浅谈ASP.NET字符串格式化应用

ASP.NET字符串格式化显示方法是什么呢?ASP.NET字符串格式化显示方法的具体使用情况又是如何的呢?那么下面我们来具体看看到底有哪些呢?date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo) 如此类推.ASP.NET字符串格式化1.绑定时格式化日期方法:﹤ASP:BOUNDCOLUMN DATAFIELD= "Join...

weixin_30488085的博客 89

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Asp.net日期字符串格式化显示

我们经常会遇到对时间进行转换,达到不同的显示效果,默认格式为:2006-6-6 14:33:34 如果要换成成200606,06-2006,2006-6-6或更多的格式该怎么办呢? 这里将要用到:DateTime.ToString的方法(String, IFormatProvider) 示例: using System; using System.Globalization; Str

Finder_Way 754

[转]Asp.net日期字符串格式化显示方法

  fffff 秒的小数精度为五位。其余数字被截断。   ffffff 秒的小数精度为六位。其余数字被截断。   fffffff 秒的小数精度为七位。其余数字被截断。   t 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。   tt 在 AMDesignator 或 PMDesignator 中定义的 AM/PM ...

weixin_30687051的博客 136

asp.net gridview 格式化字符串问题

 今天在博客园上看到的关于格式化字符串问题,特贴来,因为以后肯定会碰到。http://www.cnblogs.com/anson/archive/2006/06/07/419883.html

NogamesNow的专栏 1533

asp.net 字符串格式化

字符串格式经常用到,在MSDN中找出来的,方便查看DataFormatString属性:{0:Bxx} B为取值类型格式字符 说明 C  以货币格式显示数值。 D  以十进制格式显示数值。 E  以科学记数法(指数)格式显示数值。 F  以固定格式显示数值。 G  以常规格式显示数值。 N  以数字格式显示数值。 X  以十六进制格式显示数值。例:  float   money=153325.

黑暗天堂 1027

asp.net里获取当前时间,并字符串格式化转换(转)

asp.net里获 取当前时间,并字符串格式化转换 1.string strTime = DateTime.Now.ToLongTimeString(); 2. DateTime dt = DateTime.Now; String str = dt.ToString("yyyy-MM-dd"); 或者 string str = DateTime.Now.ToString("yyyy-MM-dd")...

weixin_33754065的博客 451
上一篇: MS-SQL server数据库开发精典技巧
下一篇: VS2005中textBox的AutoComplete功能
Teng_s2000
博客等级 码龄22年 362粉丝 273原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值