自定义 DateTime 格式字符串由一个或多个自定义 DateTime 格式说明符组成,该格式字符串定义了由格式化操作产生的 DateTime 对象的文本表示形式。请注意,任何非标准 DateTime 格式字符串的字符串都被解释为自定义 DateTime 格式字符串。
自定义 DateTime 格式说明符
下表描述了自定义 DateTime 格式说明符。有关各格式说明符所产生输出的示例,请参见自定义 DateTime 格式字符串输出示例。
格式说明符 | 说明 |
---|---|
d |
将月中日期表示为从 1 至 31 的数字。一位数字的日期设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。 |
dd |
将月中日期表示为从 01 至 31 的数字。一位数字的日期设置为带前导零的格式。 |
ddd |
将一周中某天的缩写名称表示为当前 System.Globalization.DateTimeFormatInfo.AbbreviatedDayNames 属性中定义的名称。 |
dddd(另加任意数量的“d”说明符) |
将一周中某天的全名表示为当前 System.Globalization.DateTimeFormatInfo.DayNames 属性中定义的名称。 |
f |
表示秒部分的最高有效位。 请注意,如果“f”格式说明符单独使用,没有其他格式说明符,则该说明符被看作是“f”标准 DateTime 格式说明符(完整日期/时间模式)。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。 将此格式说明符与 ParseExact 或 TryParseExact 方法一起使用时,所用“f”格式说明符的数目指示要分析的秒部分的最高有效位位数。 |
ff |
表示秒部分的两个最高有效位。 |
fff |
表示秒部分的三个最高有效位。 |
ffff |
表示秒部分的四个最高有效位。 |
fffff |
表示秒部分的五个最高有效位。 |
ffffff |
表示秒部分的六个最高有效位。 |
fffffff |
表示秒部分的七个最高有效位。 |
F |
表示秒部分的最高有效位。如果该位为零,则不显示任何信息。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。 将此格式说明符与 ParseExact 或 TryParseExact 方法一起使用时,所用“F”格式说明符的数目指示要分析的秒部分的最高有效位最大位数。 |
FF |
表示秒部分的两个最高有效位。但不显示尾随零(或两个零位)。 |
FFF |
表示秒部分的三个最高有效位。但不显示尾随零(或三个零位)。 |
FFFF |
表示秒部分的四个最高有效位。但不显示尾随零(或四个零位)。 |
FFFFF |
表示秒部分的五个最高有效位。但不显示尾随零(或五个零位)。 |
FFFFFF |
表示秒部分的六个最高有效位。但不显示尾随零(或六个零位)。 |
FFFFFFF |
表示秒部分的七个最高有效位。但不显示尾随零(或七个零位)。 |
g 或 gg(另加任意数量的“g”说明符) |
表示时期或纪元(例如 A.D.)。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该说明符。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。 |
h |
将小时表示为从 1 至 12 的数字,即通过 12 小时制表示小时,自午夜或中午开始对整小时计数。因此,午夜后经过的某特定小时数与中午过后的相同小时数无法加以区分。小时数不进行舍入,一位数字的小时数设置为不带前导零的格式。例如,给定时间为 5:43,则此格式说明符显示“5”。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。 |
hh, hh(另加任意数量的“h”说明符) |
将小时表示为从 01 至 12 的数字,即通过 12 小时制表示小时,自午夜或中午开始对整小时计数。因此,午夜后经过的某特定小时数与中午过后的相同小时数无法加以区分。小时数不进行舍入,一位数字的小时数设置为带前导零的格式。例如,给定时间为 5:43,则此格式说明符显示“05”。 |
H |
将小时表示为从 0 至 23 的数字,即通过从零开始的 24 小时制表示小时,自午夜开始对小时计数。一位数字的小时数设置为不带前导零的格式。 |
HH, HH(另加任意数量的“H”说明符) |
将小时表示为从 00 至 23 的数字,即通过从零开始的 24 小时制表示小时,自午夜开始对小时计数。一位数字的小时数设置为带前导零的格式。 |
K |
表示 DateTime.Kind 属性的不同值,即“Local”、“Utc”或“Unspecified”。此说明符以文本形式循环设置 Kind 值并保留时区。如果 Kind 值为“Local”,则此说明符等效于“zzz”说明符,用于显示本地时间偏移量,例如“-07:00”。对于“Utc”类型值,该说明符显示字符“Z”以表示 UTC 日期。对于“Unspecified”类型值,该说明符等效于“”(无任何内容)。 |
m |
将分钟表示为从 0 至 59 的数字。分钟表示自前一小时后经过的整分钟数。一位数字的分钟数设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。 |
mm, mm(另加任意数量的“m”说明符) |
将分钟表示为从 00 至 59 的数字。分钟表示自前一小时后经过的整分钟数。一位数字的分钟数设置为带前导零的格式。 |
M |
将月份表示为从 1 至 12 的数字。一位数字的月份设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。 |
MM |
将月份表示为从 01 至 12 的数字。一位数字的月份设置为带前导零的格式。 |
MMM |
将月份的缩写名称表示为当前 System.Globalization.DateTimeFormatInfo.AbbreviatedMonthNames 属性中定义的名称。 |
MMMM |
将月份的全名表示为当前 System.Globalization.DateTimeFormatInfo.MonthNames 属性中定义的名称。 |
s |
将秒表示为从 0 至 59 的数字。秒表示自前一分钟后经过的整秒数。一位数字的秒数设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。 |
ss, ss(另加任意数量的“s”说明符) |
将秒表示为从 00 至 59 的数字。秒表示自前一分钟后经过的整秒数。一位数字的秒数设置为带前导零的格式。 |
t |
表示当前 System.Globalization.DateTimeFormatInfo.AMDesignator 或 System.Globalization.DateTimeFormatInfo.PMDesignator 属性中定义的 A.M./P.M. 指示符的第一个字符。如果正在格式化的时间中的小时数小于 12,则使用 A.M. 指示符;否则使用 P.M. 指示符。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。 |
tt, tt(另加任意数量的“t”说明符) |
将 A.M./P.M. 指示符表示为当前 System.Globalization.DateTimeFormatInfo.AMDesignator 或 System.Globalization.DateTimeFormatInfo.PMDesignator 属性中定义的内容。如果正在格式化的时间中的小时数小于 12,则使用 A.M. 指示符;否则使用 P.M. 指示符。 |
y |
将年份表示为最多两位数字。如果年份多于两位数,则结果中仅显示两位低位数。如果年份少于两位数,则该数字设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。 |
yy |
将年份表示为两位数字。如果年份多于两位数,则结果中仅显示两位低位数。如果年份少于两位数,则用前导零填充该数字使之达到两位数。 |
yyy |
将年份表示为三位数字。如果年份多于三位数,则结果中仅显示三位低位数。如果年份少于三位数,则用前导零填充该数字使之达到三位数。 请注意,对于年份可以为五位数的泰国佛历,此格式说明符将显示全部五位数。 |
yyyy |
将年份表示为四位数字。如果年份多于四位数,则结果中仅显示四位低位数。如果年份少于四位数,则用前导零填充该数字使之达到四位数。 请注意,对于年份可以为五位数的泰国佛历,此格式说明符将呈现全部五位数。 |
yyyyy(另加任意数量的“y”说明符) |
将年份表示为五位数字。如果年份多于五位数,则结果中仅显示五位低位数。如果年份少于五位数,则用前导零填充该数字使之达到五位数。 如果存在额外的“y”说明符,则用所需个数的前导零填充该数字使之达到“y”说明符的数目。 |
z |
表示系统时间距格林威治时间 (GMT) 以小时为单位测量的带符号时区偏移量。例如,位于太平洋标准时区中的计算机的偏移量为“-8”。 偏移量始终显示为带有前导符号。加号 (+) 指示小时数早于 GMT,减号 (-) 指示小时数迟于 GMT。偏移量范围为 –12 至 +13。一位数字的偏移量设置为不带前导零的格式。偏移量受夏时制影响。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。 |
zz |
表示系统时间距格林威治时间 (GMT) 以小时为单位测量的带符号时区偏移量。例如,位于太平洋标准时区中的计算机的偏移量为“-08”。 偏移量始终显示为带有前导符号。加号 (+) 指示小时数早于 GMT,减号 (-) 指示小时数迟于 GMT。偏移量范围为 –12 至 +13。一位数字的偏移量设置为带前导零的格式。偏移量受夏时制影响。 |
zzz, zzz(另加任意数量的“z”说明符) |
表示系统时间距格林威治时间 (GMT) 以小时和分钟为单位测量的带符号时区偏移量。例如,位于太平洋标准时区中的计算机的偏移量为“-08:00”。 偏移量始终显示为带有前导符号。加号 (+) 指示小时数早于 GMT,减号 (-) 指示小时数迟于 GMT。偏移量范围为 –12 至 +13。一位数字的偏移量设置为带前导零的格式。偏移量受夏时制影响。 |
: |
当前 System.Globalization.DateTimeFormatInfo.TimeSeparator 属性中定义的时间分隔符,用于区分小时、分钟和秒。 |
/ |
当前 System.Globalization.DateTimeFormatInfo.DateSeparator 属性中定义的日期分隔符,用于区分年、月和日。 |
" |
带引号的字符串(引号)。显示两个引号 (") 之间的任意字符串的文本值。在每个引号前使用转义符 (/)。 |
' |
带引号的字符串(撇号)。显示两个撇号 (') 字符之间的任意字符串的文本值。 |
%c |
当自定义 DateTime 格式字符串只包含自定义格式说明符“c”时,表示与该自定义格式说明符关联的结果。也就是说,若要单独使用自定义格式说明符“d”、“f”、“F”、“h”、“m”、“s”、“t”、“y”、“z”、“H”或“M”,请指定“%d”、“%f”、“%F”、“%h”、“%m”、“%s”、“%t”、“%y”、“%z”、“%H”或“%M”。有关使用单个格式说明符的更多信息,请参见使用单个自定义格式说明符。 |
/c |
转义符。当字符“c”前带有转义符 (/) 时,将该字符显示为文本。若要将反斜杠字符本身插入结果字符串,请使用两个转义符(“//”)。 |
任何其他字符 |
所有其他字符被复制到结果字符串中,而且不影响格式化。 |
控制面板设置
控制面板中“区域和语言选项”项中的设置会影响由格式化操作产生的结果字符串。这些设置用于初始化与当前线程区域性关联的 DateTimeFormatInfo 对象,并且当前线程区域性将提供用于控制格式设置的值。使用不同设置的计算机会生成不同的结果字符串。
DateTimeFormatInfo 属性
格式化受当前 DateTimeFormatInfo 对象的属性影响,其由当前线程区域性隐式提供或由调用格式化的方法的 IFormatProvider 参数显示提供。为 IFormatProvider 参数指定一个表示区域性的 CultureInfo 对象或指定一个 DateTimeFormatInfo 对象。
许多标准 DateTime 格式说明符是由当前 DateTimeFormatInfo 对象的属性定义的格式化模式的别名。这意味着通过更改相应的 DateTimeFormatInfo 属性可以改变由某些标准 DateTime 格式说明符产生的结果。
使用单个自定义格式说明符
自定义 DateTime 格式字符串由两个或更多字符组成。例如,如果格式字符串仅包含说明符“h”,则该格式字符串将被解释为标准 DateTime 格式字符串。但是,在这种特定情况下将引发异常,因为不存在“h”标准 DateTime 格式说明符。
若要使用单个自定义 DateTime 格式说明符,在 DateTime 说明符之前或之后添加一个空格,或在 DateTime 说明符之前添加一个百分号 (%) 格式说明符。例如,格式字符串“h ”和“%h”将被解释为自定义 DateTime 格式字符串,其显示当前 DateTime 对象所表示的小时。请注意,如果使用了空格,则该字符串在结果字符串中将显示为原义字符。
使用自定义格式字符串
下面的代码段演示如何从 DateTime 对象创建自定义格式化字符串。此示例假定当前区域性是美国英语 (en-US)。
// This code example demonstrates the result yielded by each custom // DateTime format specifier. using System; using System.Globalization; class Sample { public static void Main() { string formatString; CultureInfo ci = new CultureInfo(""); string msgDTctor = "The DateTime constructor for " + "January 3, 0001 A.D., 02:09:20.444 P.M. is/n" + " DateTime(0001, 1, 3, 14, 9, 20, 444)/n"; DateTime thisDate = new DateTime(0001, 1, 3, 14, 9, 20, 444); // This is equal to DateTime thisDate = new DateTime(0001, 1, 3, 14, 9, 20, 444, DateTime.Unspecified) DateTime utcDate = new DateTime(0002, 2, 4, 15, 10, 21, 555, DateTimeKind.Utc); DateTime localDate = new DateTime(0003, 3, 5, 16, 11, 22, 666, DateTimeKind.Local); // Custom DateTime format specifiers string[] specifiers = { // Year "%y", "yy", "yyy", "yyyy", "yyyyy", // Month "%M", "MM", "MMM", "MMMM", // Day "%d", "dd", "ddd", "dddd", // Era "%g", "gg", // Hour "%h", "hh", "%H", "HH", // Minute "%m", "mm", // Second "%s", "ss", // Fraction of a second "%f", "ff", "fff", "ffff", "fffff", "ffffff", "fffffff", "%F", "FF", "FFF", "FFFF", "FFFFF", "FFFFFF", "FFFFFFF", // A.M./P.M. designator "%t", "tt", // UTC offset "%z", "zz", "zzz", // Quoted string (apostrophe) "'The year is' yyyy", // Quoted string (quotation mark) "/"The year is/" yyyy", // Escape character @"//", }; // Console.Clear(); Console.WriteLine("The culture is {0}.", ci.DisplayName); Console.WriteLine(msgDTctor); Console.WriteLine("{0,20} {1}", "Custom format string", "Yields"); Console.WriteLine("{0,20} {1}", "--------------------", "------"); foreach (string format in specifiers) { formatString = "/"" + format + "/""; Console.WriteLine("{0,20} /"{1}/"", formatString, thisDate.ToString(format)); } Console.WriteLine(); Console.WriteLine(); // Example of using "K" format specifier. Console.WriteLine("Format different kinds of DateTime using /"K/""); Console.WriteLine("{0, 20} {1}", "DateTimeKind", "Yields"); Console.WriteLine("{0,20} {1}", "------------", "------"); Console.WriteLine("{0,20} /"{1}/"", thisDate.Kind, thisDate.ToString("%K")); Console.WriteLine("{0,20} /"{1}/"", utcDate.Kind, utcDate.ToString("%K")); Console.WriteLine("{0,20} /"{1}/"", localDate.Kind, localDate.ToString("%K")); } } /* This code example produces the following results: The culture is Invariant Language (Invariant Country). The DateTime constructor for January 3, 0001 A.D., 02:09:20.444 P.M. is DateTime(0001, 1, 3, 14, 9, 20, 444) Custom format string Yields -------------------- ------ "%y" "1" "yy" "01" "yyy" "001" "yyyy" "0001" "yyyyy" "00001" "%M" "1" "MM" "01" "MMM" "Jan" "MMMM" "January" "%d" "3" "dd" "03" "ddd" "Wed" "dddd" "Wednesday" "%g" "A.D." "gg" "A.D." "%h" "2" "hh" "02" "%H" "14" "HH" "14" "%m" "9" "mm" "09" "%s" "20" "ss" "20" "%f" "4" "ff" "44" "fff" "444" "ffff" "4440" "fffff" "44400" "ffffff" "444000" "fffffff" "4440000" "%F" "4" "FF" "44" "FFF" "444" "FFFF" "444" "FFFFF" "444" "FFFFFF" "444" "FFFFFFF" "444" "%t" "P" "tt" "PM" "%z" "-8" "zz" "-08" "zzz" "-08:00" "'The year is' yyyy" "The year is 0001" ""The year is" yyyy" "The year is 0001" "//" "/" Format different kinds of DateTime using "K" DateTimeKind Yields ------------ ------ Unspecified "" Utc "Z" Local "-08:00" */‘