Strings.Format(Object, String) 方法

定义

返回根据格式 String 表达式中包含的指令设置格式的字符串。

public static string Format (object? Expression, string? Style = "");
public static string Format (object Expression, string Style = "");
static member Format : obj * string -> string
Public Function Format (Expression As Object, Optional Style As String = "") As String

参数

Expression
Object

必填。 任何有效的表达式。

Style
String

自选。 有效的命名格式或用户定义的格式 String 表达式。

返回

根据格式 String 表达式中包含的指令设置格式的字符串。

示例

此示例演示 Format 函数的各种用法,以使用 String 格式和用户定义的格式设置值的格式。 对于日期分隔符(/)、时间分隔符(:),以及 AM/PM 指示器(ttt),系统显示的实际格式化输出取决于代码正在使用的区域设置。 在开发环境中显示时间和日期时,将使用代码区域设置的短时间格式和短日期格式。

注意

对于使用 24 小时制的区域设置,AM/PM 指示器(ttt)不显示任何内容。

Dim testDateTime As Date = #1/27/2001 5:04:23 PM#
Dim testStr As String
' Returns current system time in the system-defined long time format.
testStr = Format(Now(), "Long Time")
' Returns current system date in the system-defined long date format.
testStr = Format(Now(), "Long Date")
' Also returns current system date in the system-defined long date 
' format, using the single letter code for the format.
testStr = Format(Now(), "D")

' Returns the value of testDateTime in user-defined date/time formats.
' Returns "5:4:23".
testStr = Format(testDateTime, "h:m:s")
' Returns "05:04:23 PM".
testStr = Format(testDateTime, "hh:mm:ss tt")
' Returns "Saturday, Jan 27 2001".
testStr = Format(testDateTime, "dddd, MMM d yyyy")
' Returns "17:04:23".
testStr = Format(testDateTime, "HH:mm:ss")
' Returns "23".
testStr = Format(23)

' User-defined numeric formats.
' Returns "5,459.40".
testStr = Format(5459.4, "##,##0.00")
' Returns "334.90".
testStr = Format(334.9, "###0.00")
' Returns "500.00%".
testStr = Format(5, "0.00%")

注解

String.Format 方法还提供类似的功能。

如果要设置非局部化数值字符串的格式,则应使用用户定义的数字格式来确保获得所需的外观。

如果尝试在不指定 Style的情况下设置数字格式,Format 函数提供的功能类似于 Str 函数,尽管它在国际上是众所周知的。 但是,使用 Format 函数格式化为字符串的正数不包括为值符号保留的前导空间;使用 Str 函数转换的函数将保留前导空间。

不同数值的不同格式

数字的用户定义格式表达式可以有一到三个部分,用分号分隔。 如果 Format 函数的 Style 参数包含预定义的数字格式之一,则只允许一个节。

如果使用 这是结果
仅一节 格式表达式适用于所有值。
两个部分 第一节适用于正值和零;第二个应用于负值。
三个部分 第一节适用于正值,第二部分适用于负值,第三部分适用于零。

以下示例包含两个部分:第一个部分定义正值和零的格式;第二节定义负值的格式。 由于 Format 函数的 Style 参数采用字符串,因此它用引号引起来。

Dim style1 As String = "$#,##0;($#,##0)"

如果包含分号,且它们之间没有任何内容,则使用正值的格式打印缺失部分。 例如,以下格式使用第一节中的格式显示正值和负值,如果值为零,则显示 Zero

Dim style2 As String = "$#,##0;;\Z\e\r\o"

预定义的数字格式

下表标识了预定义的数字格式名称。 这些参数可以按名称用作 Format 函数的 Style 参数:

格式名称 描述
General NumberGg 显示没有千位分隔符的数字。

例如,Format(&H3FA, "g") 返回 1018
CurrencyCc 显示具有千位分隔符的数字(如果适用);显示小数分隔符右侧的两位数字。 输出基于系统区域设置。

例如,Format(1234567, "c") 返回 $1,234,567.00
FixedFf 在小数点分隔符右侧至少显示一位数字和两位数字。

例如,Format(1234567, "f") 返回 1234567.00
StandardNn 显示带千位分隔符的数字,左边至少有一位数字,小数点分隔符右侧至少有一位数字。

例如,Format(1234567, "n") 返回 1,234,567.00
Percent 显示数字乘以 100,百分号(%)紧随右侧追加;始终显示小数分隔符右侧的两位数字。

例如,Format(0.4744, "Percent") 返回 47.44%
Pp 显示数千位分隔符的数字乘以 100,其百分比符号(%)追加到右侧,并用单个空格分隔;始终显示小数分隔符右侧的两位数字。

例如,Format(0.80345, "p") 返回 80.35 %
Scientific 使用标准科学表示法,提供两个有效数字。

例如,Format(1234567, "Scientific") 返回 1.23E+06
Ee 使用标准科学表示法,提供六个有效数字。

例如,Format(1234567, "e") 返回 1.234567e+006
Dd 将数字显示为一个字符串,其中包含以十进制格式(以 10 为底 10)的数字的值。 仅对整型类型(ByteShortIntegerLong)支持此选项。

例如,Format(&H7F, "d") 返回 127
Xx 以十六进制 (base 16) 格式显示数字作为包含数字值的字符串。 仅对整型类型(ByteShortIntegerLong)支持此选项。

例如,Format(127, "x") 返回 7f
Yes/No 如果数字为 0,则显示 No;否则,显示 Yes

例如,Format(0, "Yes/No") 返回 No
True/False 如果数字为 0,则显示 False;否则,显示 True

例如,Format(1, "True/False") 返回 True
On/Off 如果数字为 0,则显示 Off;否则,显示 On

例如,Format(1, "On/Off") 返回 On

智能设备开发人员说明

不支持 Yes/NoTrue/FalseOn/Off 格式。

User-Defined 数字格式

下表标识可用于创建用户定义的数字格式的字符。 这些参数可用于为 Format 函数生成 Style 参数:

字符 描述
没有 显示没有格式的数字。
0 数字占位符。 显示数字或零。 如果表达式在格式字符串中显示零的位置有一个数字,则显示它;否则,在该位置显示零。

如果数字的位数少于格式表达式中的零(在小数的两侧),则显示前导或尾随零。 如果小数分隔符右侧的数字数大于格式表达式中小数分隔符右侧的零,则数字将数字舍入为零的位数。 如果小数点分隔符左侧的数字数多于格式表达式中小数分隔符左侧的零,则显示额外的数字而不进行修改。
# 数字占位符。 显示数字或无内容。 如果表达式在格式字符串中显示 # 字符的位置有一个数字,则显示它;否则,不在该位置显示任何内容。

此符号的工作方式类似于 0 数字占位符,但如果数字的位数少于格式表达式中小数分隔符两侧 # 字符,则不会显示前导和尾随零。
. 十进制占位符。 小数占位符确定小数点分隔符左侧和右侧显示的数字数。 如果格式表达式仅包含此符号左侧 # 个字符;小于 1 的数字以小数分隔符开头。 若要显示以小数显示的前导零,请使用零作为小数分隔符左侧的第一个数字占位符。 在某些区域设置中,逗号用作小数分隔符。 格式输出中用作小数占位符的实际字符取决于系统识别的数字格式。 因此,即使处于使用逗号作为小数占位符的区域设置,也应使用句点作为格式的小数占位符。 格式化字符串将以正确的格式显示区域设置。
% 占位符的百分比。 将表达式乘以 100。 百分比字符(%)插入其出现在格式字符串中的位置。
, 千位分隔符。 千位分隔符在小数点分隔符左侧有四个或更多个位置的数字中,将数千个分隔符与数百个分隔符分开。 如果格式包含由数字占位符括起来的千位分隔符(0#),则指定了对千位分隔符的标准使用。

紧邻小数点分隔符左侧的千位分隔符(无论是否指定了小数点),或者字符串中最右边的字符表示“将数字除以 1,000,根据需要舍入”。小于 1,000 但大于或等于 500 的数字显示为 1,小于 500 的数字显示为 0。 此位置中的两个相邻千位分隔符按 100 万因子缩放,每个附加分隔符的附加因子为 1,000。

除紧邻小数分隔符左侧或字符串最右侧位置之外的任何位置的多个分隔符都被视为指定千位分隔符的使用。 在某些区域设置中,句点用作千位分隔符。 用作格式化输出中的千位分隔符的实际字符取决于系统识别的数字格式。 因此,即使处于使用句点作为千位分隔符的区域设置,也应使用逗号作为千位分隔符。 格式化字符串将以正确的格式显示区域设置。

例如,请考虑以下三个格式字符串:

- "#,0.",它使用千位分隔符将数字 1 亿格式设置为字符串“100,000,000”。
- "#0,.",它使用缩放因子 10000 万将数字 1 亿格式设置为字符串“100000”。
- "#,0,.",它使用千位分隔符和缩放将数字 1 亿格式设置为字符串“100,000”。
: 时间分隔符。 在某些区域设置中,其他字符可用于表示时间分隔符。 当设置时间值的格式时,时间分隔符分隔小时、分钟和秒。 用作格式化输出中的时间分隔符的实际字符由系统设置确定。
/ 日期分隔符。 在某些区域设置中,其他字符可用于表示日期分隔符。 日期分隔符分隔日期值的格式时,日期、月份和年份。 用作格式化输出中的日期分隔符的实际字符由系统设置确定。
E-``E+``e-``e+ 科学格式。 如果格式表达式在 E-E+e-e+左侧至少包含一个数字占位符(0#),则数字以科学格式显示,并在数字与其指数之间插入 Ee。 左侧的数字占位符数决定了指数中的位数。 使用 E-e- 在负指数旁边放置减号。 使用 E+e+ 将负指数旁边的减号和正指数旁边的加号放在负指数旁边。 还必须包含此符号右侧的数字占位符才能获取正确的格式。
- + $ () 文本字符。 这些字符的显示方式与格式字符串中的类型完全相同。 若要显示除列出的字符以外的字符,请在其前面加上反斜杠(\),或用双引号(“ ) 将其括起来。
\ 显示格式字符串中的下一个字符。 若要将具有特殊含义的字符显示为文本字符,请在其前面加上反斜杠(\)。 不显示反斜杠本身。 使用反斜杠与将下一个字符括在双引号中相同。 若要显示反斜杠,请使用两个反斜杠(\\)。

无法显示为文本字符的字符的示例包括日期格式和时间格式字符(acdhmnpqstwy/:)、数字格式字符(#0%Ee、逗号、 和句点),以及字符串格式字符(@&<>!)。
"``ABC``" 显示双引号 (“ ) 内的字符串。 若要在代码中包含样式参数中的字符串,必须使用 Chr(34) 将文本括起来(34 是引号(“)的字符代码)。

旧代码示例

下表包含数字的一些示例格式表达式。 (这些示例都假定系统的区域设置是英语-美国)第一列包含 Format 函数 Style 参数的格式字符串;如果格式化数据具有列标题中给定的值,则其他列包含生成的输出。

格式(Style 格式为“5” 格式为“-5” 格式为“0.5”
Zero-length string ("") 5 -5 0.5
0 5 -5 1
0.00 5.00 -5.00 0.50
#,##0 5 -5 1
$#,##0;($#,##0) $5 ($5) $1
$#,##0.00;($#,##0.00) $5.00 ($5.00) $0.50
0% 500% -500% 50%
0.00% 500.00% -500.00% 50.00%
0.00E+00 5.00E+00 -5.00E+00 5.00E-01
0.00E-00 5.00E00 -5.00E00 5.00E-01

预定义的日期/时间格式

下表标识预定义的日期和时间格式名称。 这些参数可以按名称用作 Format 函数的样式参数:

格式名称 描述
General DateG 显示日期和时间。 例如,3/12/2008 11:07:31 AM。 日期显示由应用程序的当前区域性值确定。
Long DateMedium DateD 根据当前区域性的长日期格式显示日期。 例如,Wednesday, March 12, 2008
Short Dated 使用当前区域性的短日期格式显示日期。 例如,3/12/2008

d 字符以用户定义的日期格式显示日期。
Long TimeMedium TimeT 使用当前区域性的长时间格式显示时间;通常包括小时、分钟、秒。 例如,11:07:31 AM
Short Timet 使用当前区域性的短时间格式显示时间。 例如,11:07 AM

对于使用用户定义的时间格式的 12 小时制的区域设置,t 字符显示 AMPM 值。
f 根据当前区域性的格式显示长日期和短时间。 例如,Wednesday, March 12, 2008 11:07 AM
F 根据当前区域性的格式显示长日期和长时间。 例如,Wednesday, March 12, 2008 11:07:31 AM
g 根据当前区域性的格式显示短日期和短时间。 例如,3/12/2008 11:07 AM
Mm 显示日期的月份和日期。 例如,March 12

M 字符以用户定义的日期格式显示月份。 m 字符以用户定义的时间格式显示分钟数。
Rr 根据 RFC1123Pattern 属性设置日期的格式。 例如,Wed, 12 Mar 2008 11:07:31 GMT。 格式化日期不会调整日期和时间的值。 在调用 Format 函数之前,必须将日期/时间值调整为 GMT。
s 将日期和时间的格式设置为可排序索引。 例如,2008-03-12T11:07:31

s 字符以用户定义的时间格式显示秒。
u 将日期和时间的格式设置为 GMT 可排序索引。 例如,2008-03-12 11:07:31Z
U 将日期和时间的格式设置为 GMT 的长日期和时间。 例如,Wednesday, March 12, 2008 6:07:31 PM
Yy 将日期的格式设置为年份和月份。 例如,March, 2008

Yy 字符以用户定义的日期格式显示年份。

有关应用程序的当前区域性信息的详细信息,请参阅 区域性如何影响 Visual Basic 中的字符串

User-Defined 日期/时间格式

下表显示了可用于创建用户定义的日期/时间格式的字符。 与早期版本的 Visual Basic 不同,这些格式字符区分大小写。

字符 描述
: 时间分隔符。 在某些区域设置中,其他字符可用于表示时间分隔符。 当设置时间值的格式时,时间分隔符分隔小时、分钟和秒。 用作格式化输出中的时间分隔符的实际字符由应用程序的当前区域性值确定。
/ 日期分隔符。 在某些区域设置中,其他字符可用于表示日期分隔符。 日期分隔符分隔日期值的格式时,日期、月份和年份。 用作格式化输出中的日期分隔符的实际字符取决于应用程序的当前区域性。
% 用于指示以下字符应作为单字母格式读取,而不考虑任何尾随字母。 还用于指示将单字母格式读取为用户定义的格式。 有关更多详细信息,请参阅以下内容。
d 将日期显示为没有前导零的数字(例如,1)。 如果这是用户定义的数字格式中唯一的字符,请使用 %d
dd 将日期显示为前导零的数字(例如,01)。
ddd 将日期显示为缩写(例如,Sun)。
dddd 将当天显示为全名(例如,Sunday)。
M 将月份显示为没有前导零的数字(例如,1 月表示为 1)。 如果这是用户定义的数字格式中唯一的字符,请使用 %M
MM 将月份显示为带前导零的数字(例如,01/12/01)。
MMM 将月份显示为缩写(例如,Jan)。
MMMM 将月份显示为完整月份名称(例如,January)。
gg 显示句点/纪元字符串(例如,A.D.)。
h 使用 12 小时制(例如,1:15:15 PM)将小时显示为没有前导零的数字。 如果这是用户定义的数字格式中唯一的字符,请使用 %h
hh 使用 12 小时制将小时显示为带前导零的数字(例如,01:15:15 PM)。
H 使用 24 小时制将小时显示为不带前导零的数字(例如,1:15:15)。 如果这是用户定义的数字格式中唯一的字符,请使用 %H
HH 使用 24 小时制将小时显示为带前导零的数字(例如,01:15:15)。
m 将分钟显示为不带前导零的数字(例如,12:1:15)。 如果这是用户定义的数字格式中唯一的字符,请使用 %m
mm 将分钟显示为带前导零的数字(例如,12:01:15)。
s 将第二个数字显示为不带前导零的数字(例如,12:15:5)。 如果这是用户定义的数字格式中唯一的字符,请使用 %s
ss 将第二个显示为带前导零的数字(例如,12:15:05)。
f 显示秒的分数。 例如,ff 显示数百秒,而 ffff 显示十万秒。 用户定义格式最多可使用七个 f 符号。 如果这是用户定义的数字格式中唯一的字符,请使用 %f
t 使用 12 小时制,并在中午前的任何小时显示大写 A;显示中午到晚上 11:59 之间的任意小时的大写 P。如果这是用户定义的数字格式中唯一的字符,请使用 %t
tt 对于使用 12 小时制的区域设置,显示一个大写 AM,中午前的任何一小时;显示一个大写 PM,中午到下午 11:59 之间任意一小时。

对于使用 24 小时制的区域设置,不显示任何内容。
y 显示不带前导零的年份号(0-9)。 如果这是用户定义的数字格式中唯一的字符,请使用 %y
yy 使用前导零(如果适用)以两位数的数字格式显示年份。
yyy 以四位数的数字格式显示年份。
yyyy 以四位数的数字格式显示年份。
z 显示不带前导零的时区偏移量(例如,-8)。 如果这是用户定义的数字格式中唯一的字符,请使用 %z
zz 显示带前导零的时区偏移量(例如,-08
zzz 显示完整时区偏移量(例如,-08:00

旧代码示例

下面是 December 7, 1958, 8:50 PM, 35 seconds用户定义的日期和时间格式的示例:

格式 显示
M/d/yy 12/7/58
d-MMM 7-Dec
d-MMMM-yy 7-December-58
d MMMM 7 December
MMMM yy December 58
hh:mm tt 08:50 PM
h:mm:ss t 8:50:35 P
H:mm 20:50
H:mm:ss 20:50:35
M/d/yyyy H:mm 12/7/1958 20:50

智能设备开发人员说明

设备的最小时间分辨率由设备的制造商确定。 如果设备的时间分辨率足够粗糙,则当在该设备上运行时,f 格式字符返回 0。

适用于

另请参阅