您的位置:首页 > 编程语言 > C#

C# string.format() 格式化说明符

2008-12-08 15:36 441 查看
一、定义

String.Format是将指定的String类型的数据中的每个格式项替换为相应对象的值的文本等效项。

如:

(1)

stringp1="Jackie";

stringp2="Aillo";

Response.Write(String.Format("Hello{0},I'm{1}",p1,p2));

(2)

Response.Write(String.Format("Hello{0},I'm{1}","Jackie","Aillo"));

这二者的效果是一样的。都是将最后面的两项的值分别替换第一项的{0}和{1}。

输出的结果是:HelloJackie,I'mAillo
二、String.Format的多格式定义:

这里所谓的多格式是指一个格式项中可以定义1~3个格式参数,每种格式参数用分号(;)隔开。带2个和3个格式参数的格式项所对应的值必须是数值类型的,这样才能判断是否为负数、正数、零。

带1个格式参数:

//以科学计数法的格式输出

doublep1=1000000;

Response.Write(String.Format("{0:E2}",p1));

带2个格式参数:

/*当格式项对应的值为非负数,则选择第一种格式;值为负数则选第二种格式*/

doublep1=10000;

doublep2=-2420.50;

Response.Write(String.Format("{0:#,###0.00;#,###0.000;}<BR>",p1));

Response.Write(String.Format("{0:#,###0.00;#,###0.000;}",p2));

带3个格式参数:

/*当格式项对应的值为正数则选择第一张格式;

负数则为第二中格式;

值等于零则为第三种格式*/

1doublep1=10000;

doublep2=-2420.50;

doublep3=0.00;

Response.Write(String.Format("{0:#,###0.00;#,###0.000;#,###0.0000}<BR>",p1));

Response.Write(String.Format("{0:#,###0.00;#,###0.000;#,###0.0000}<BR>",p3));

Response.Write(String.Format("{0:#,###0.00;#,###0.000;#,###0.0000}",p2));

补充:

{0:N2}中的N3,f3表示格式化之后数据的类型以及小数的位数。如:N2表示带2个小数的数字;

与此类似:

N或者n表示数字

F或者f表示固定点

E或者e表示科学计数法

D或者d表示十进制数

X或者x表示十六进制

G或者g表示常规

C或者c表示货币


IFormatProvider由NumberFormatInfo和DateTimeFormatInfo实现。NumberFormatInfo提供用于格式化基本数据类型的数字的区域性特定信息,而DateTimeFormatInfo提供用于格式化日期和时间值的区域性特定信息。

NumberFormatInfo属性:

格式字符

说明和关联属性

c、C

货币格式。CurrencyNegativePattern,CurrencyPositivePattern,CurrencySymbol,CurrencyGroupSizes,CurrencyGroupSeparator,CurrencyDecimalDigits,CurrencyDecimalSeparator.

d、D

十进制格式。

e、E

科学计数(指数)格式。

f、F

固定点格式。

g、G

常规格式。

n、N

数字格式。NumberNegativePattern,NumberGroupSizes,NumberGroupSeparator,NumberDecimalDigits,NumberDecimalSeparator.

r、R

往返格式,这确保将已转换成字符串的数字转换回数字时具有与原数字相同的值。

x、X

十六进制格式。

只能为固定区域性或特定区域性创建DateTimeFormatInfo或NumberFormatInfo,而不能为非特定区域性创建它们。有关固定区域性、特定区域性和非特定区域性的更多信息,请参见CultureInfo类。

该类实现ICloneable接口以启用NumberFormatInfo对象的复制。它还实现IFormatProvider以便为应用程序提供格式化信息。

usingSystem;
usingSystem.Globalization;
usingSystem.Text;
publicsealedclassApp
{
staticvoidMain()
{
StringBuildersb=newStringBuilder();
//LoopthroughallthespecificculturesknowntotheCLR.
foreach(CultureInfociinCultureInfo.GetCultures(CultureTypes.SpecificCultures))
{
//OnlyshowthecurrencysymbolsforculturesthatspeakEnglish.
if(ci.TwoLetterISOLanguageName!="en")continue;
//Displaytheculturenameandcurrencysymbol.
NumberFormatInfonfi=ci.NumberFormat;
sb.AppendFormat("Thecurrencysymbolfor'{0}'is'{1}'",
ci.DisplayName,nfi.CurrencySymbol);
sb.AppendLine();
}
Console.WriteLine(sb.ToString());
}
}
//Thiscodeproducesthefollowingoutput.
//
//Thecurrencysymbolfor'English(UnitedStates)'is'$'
//Thecurrencysymbolfor'English(UnitedKingdom)'is''
//Thecurrencysymbolfor'English(Australia)'is'$'
//Thecurrencysymbolfor'English(Canada)'is'$'
//Thecurrencysymbolfor'English(NewZealand)'is'$'
//Thecurrencysymbolfor'English(Ireland)'is'?'
//Thecurrencysymbolfor'English(SouthAfrica)'is'R'
//Thecurrencysymbolfor'English(Jamaica)'is'J$'
//Thecurrencysymbolfor'English(Caribbean)'is'$'
//Thecurrencysymbolfor'English(Belize)'is'BZ$'
//Thecurrencysymbolfor'English(TrinidadandTobago)'is'TT$'
//Thecurrencysymbolfor'English(Zimbabwe)'is'Z$'
//Thecurrencysymbolfor'English(RepublicofthePhilippines)'is'Php'


DateTimeFormatInfo属性:
格式字符

关联属性/说明

d

ShortDatePattern

D

LongDatePattern

f

完整日期和时间(长日期和短时间)

F

FullDateTimePattern(长日期和长时间)

g

常规(短日期和短时间)

G

常规(短日期和长时间)

m、M

MonthDayPattern

r、R

RFC1123Pattern

s

使用当地时间的SortableDateTimePattern(基于ISO8601)

t

ShortTimePattern

T

LongTimePattern

u

UniversalSortableDateTimePattern用于显示通用时间的格式

U

使用通用时间的完整日期和时间(长日期和长时间)

y、Y

YearMonthPattern

下表列出了可被合并以构造自定义模式的模式。这些模式是区分大小写的;例如,识别“MM”,但不识别“mm”。如果自定义模式包含空白字符或用单引号括起来的字符,则输出字符串页也将包含这些字符。未定义为格式模式的一部分或未定义为格式字符的字符按其原义复制。

格式模式

说明

d、%d

月中的某一天。一位数的日期没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%d”。

dd

月中的某一天。一位数的日期有一个前导零。

ddd

周中某天的缩写名称,在AbbreviatedDayNames中定义。

dddd

周中某天的完整名称,在DayNames中定义。

M、%M

月份数字。一位数的月份没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%M”。

MM

月份数字。一位数的月份有一个前导零。

MMM

月份的缩写名称,在AbbreviatedMonthNames中定义。

MMMM

月份的完整名称,在MonthNames中定义。

y、%y

不包含纪元的年份。如果不包含纪元的年份小于10,则显示不具有前导零的年份。如果该格式模式没有与其他格式模式组合,则指定“%y”。

yy

不包含纪元的年份。如果不包含纪元的年份小于10,则显示具有前导零的年份。

yyyy

包括纪元的四位数的年份。

gg

时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。

h、%h

12小时制的小时。一位数的小时数没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%h”。

hh

12小时制的小时。一位数的小时数有前导零。

H、%H

24小时制的小时。一位数的小时数没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%H”。

HH

24小时制的小时。一位数的小时数有前导零。

m、%m

分钟。一位数的分钟数没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%m”。

mm

分钟。一位数的分钟数有一个前导零。

s、%s

秒。一位数的秒数没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%s”。

ss

秒。一位数的秒数有一个前导零。

f、%f

秒的小数精度为一位。其余数字被截断。如果该格式模式没有与其他格式模式组合,则指定“%f”。

ff

秒的小数精度为两位。其余数字被截断。

fff

秒的小数精度为三位。其余数字被截断。

ffff

秒的小数精度为四位。其余数字被截断。

fffff

秒的小数精度为五位。其余数字被截断。

ffffff

秒的小数精度为六位。其余数字被截断。

fffffff

秒的小数精度为七位。其余数字被截断。

F、%F

显示秒的小数部分的最高有效数字。如果该数字为零,则不显示任何内容。如果该格式模式没有与其他格式模式组合,则指定“%F”。

FF

显示秒的小数部分的两个最高有效数字。但是,不显示尾随的零(两个零数字)。

FFF

显示秒的小数部分的三个最高有效数字。但是,不显示尾随的零(三个零数字)。

FFFF

显示秒的小数部分的四个最高有效数字。但是,不显示尾随的零(四个零数字)。

FFFFF

显示秒的小数部分的五个最高有效数字。但是,不显示尾随的零(五个零数字)。

FFFFFF

显示秒的小数部分的六个最高有效数字。但是,不显示尾随的零(六个零数字)。

FFFFFFF

显示秒的小数部分的七个最高有效数字。但是,不显示尾随的零(七个零数字)。

t、%t

AMDesignator或PMDesignator中定义的AM/PM指示项的第一个字符(如果存在)。如果该格式模式没有与其他格式模式组合,则指定“%t”。

tt

在AMDesignator或PMDesignator中定义的AM/PM指示项(如果存在)。

z、%z

时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。例如,太平洋标准时间是“-8”。如果该格式模式没有与其他格式模式组合,则指定“%z”。

zz

时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。

zzz

完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。

:

TimeSeparator中定义的默认时间分隔符。

/

DateSeparator中定义的默认日期分隔符。

%c

其中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是任意字符。照原义显示字符。若要显示反斜杠字符,请使用“\\”。

只有上面第二个表中列出的格式模式才能用于创建自定义模式;在第一个表中列出的标准格式字符不能用于创建自定义模式。自定义模式的长度至少为两个字符;例如,

DateTime.ToString("d")返回DateTime值;“d”是标准短日期模式。

DateTime.ToString("%d")返回月中的某天;“%d”是自定义模式。

DateTime.ToString("d")返回后面跟有一个空白字符的月中的某天;“d”是自定义模式。

只能为固定区域性或特定区域性创建DateTimeFormatInfo或NumberFormatInfo,而不能为非特定区域性创建它们。有关固定区域性、特定区域性和非特定区域性的更多信息,请参见CultureInfo类。

该类实现ICloneable接口以启用DateTimeFormatInfo对象的复制。它还实现IFormatProvider以便为应用程序提供格式化信息。

[code]usingSystem;
usingSystem.Globalization;
publicclassSamplesDTFI{
publicstaticvoidMain(){
//CreatesandinitializesaDateTimeFormatInfoassociatedwiththeen-USculture.
DateTimeFormatInfomyDTFI=newCultureInfo("en-US",false).DateTimeFormat;
//CreatesaDateTimewiththeGregoriandateJanuary3,2002(year=2002,month=1,day=3).
//TheGregoriancalendaristhedefaultcalendarfortheen-USculture.
DateTimemyDT=newDateTime(2002,1,3);
//Displaystheformatpatternassociatedwitheachformatcharacter.
Console.WriteLine("FORMATen-USEXAMPLE");
Console.WriteLine("CHARVALUEOFASSOCIATEDPROPERTY,IFANY\n");
Console.WriteLine("d{0}",myDT.ToString("d"));
Console.WriteLine("{0}{1}\n",myDTFI.ShortDatePattern,"(ShortDatePattern)");
Console.WriteLine("D{0}",myDT.ToString("D"));
Console.WriteLine("{0}{1}\n",myDTFI.LongDatePattern,"(LongDatePattern)");
Console.WriteLine("f{0}\n",myDT.ToString("f"));
Console.WriteLine("F{0}",myDT.ToString("F"));
Console.WriteLine("{0}{1}\n",myDTFI.FullDateTimePattern,"(FullDateTimePattern)");
Console.WriteLine("g{0}\n",myDT.ToString("g"));
Console.WriteLine("G{0}\n",myDT.ToString("G"));
Console.WriteLine("m{0}",myDT.ToString("m"));
Console.WriteLine("{0}{1}\n",myDTFI.MonthDayPattern,"(MonthDayPattern)");
Console.WriteLine("M{0}",myDT.ToString("M"));
Console.WriteLine("{0}{1}\n",myDTFI.MonthDayPattern,"(MonthDayPattern)");
Console.WriteLine("r{0}",myDT.ToString("r"));
Console.WriteLine("{0}{1}\n",myDTFI.RFC1123Pattern,"(RFC1123Pattern)");
Console.WriteLine("R{0}",myDT.ToString("R"));
Console.WriteLine("{0}{1}\n",myDTFI.RFC1123Pattern,"(RFC1123Pattern)");
Console.WriteLine("s{0}",myDT.ToString("s"));
Console.WriteLine("{0}{1}\n",myDTFI.SortableDateTimePattern,"(SortableDateTimePattern)");
Console.WriteLine("t{0}",myDT.ToString("t"));
Console.WriteLine("{0}{1}\n",myDTFI.ShortTimePattern,"(ShortTimePattern)");
Console.WriteLine("T{0}",myDT.ToString("T"));
Console.WriteLine("{0}{1}\n",myDTFI.LongTimePattern,"(LongTimePattern)");
Console.WriteLine("u{0}",myDT.ToString("u"));
Console.WriteLine("{0}{1}\n",myDTFI.UniversalSortableDateTimePattern,"(UniversalSortableDateTimePattern)");
Console.WriteLine("U{0}\n",myDT.ToString("U"));
Console.WriteLine("y{0}",myDT.ToString("y"));
Console.WriteLine("{0}{1}\n",myDTFI.YearMonthPattern,"(YearMonthPattern)");
Console.WriteLine("Y{0}",myDT.ToString("Y"));
Console.WriteLine("{0}{1}\n",myDTFI.YearMonthPattern,"(YearMonthPattern)");
}
}
/*
Thiscodeproducesthefollowingoutput.
FORMATen-USEXAMPLE
CHARVALUEOFASSOCIATEDPROPERTY,IFANY
d1/3/2002
M/d/yyyy(ShortDatePattern)
DThursday,January03,2002
dddd,MMMMdd,yyyy(LongDatePattern)
fThursday,January03,200212:00AM
FThursday,January03,200212:00:00AM
dddd,MMMMdd,yyyyh:mm:sstt(FullDateTimePattern)
g1/3/200212:00AM
G1/3/200212:00:00AM
mJanuary03
MMMMdd(MonthDayPattern)
MJanuary03
MMMMdd(MonthDayPattern)
rThu,03Jan200200:00:00GMT
ddd,ddMMMyyyyHH':'mm':'ss'GMT'(RFC1123Pattern)
RThu,03Jan200200:00:00GMT
ddd,ddMMMyyyyHH':'mm':'ss'GMT'(RFC1123Pattern)
s2002-01-03T00:00:00
yyyy'-'MM'-'dd'T'HH':'mm':'ss(SortableDateTimePattern)
t12:00AM
h:mmtt(ShortTimePattern)
T12:00:00AM
h:mm:sstt(LongTimePattern)
u2002-01-0300:00:00Z
yyyy'-'MM'-'ddHH':'mm':'ss'Z'(UniversalSortableDateTimePattern)
UThursday,January03,20028:00:00AM
yJanuary,2002
MMMM,yyyy(YearMonthPattern)
YJanuary,2002
MMMM,yyyy(YearMonthPattern)
*/

[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐
章节导航