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}。String.Format是将指定的String类型的数据中的每个格式项替换为相应对象的值的文本等效项。
如:
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"));
输出的结果是:HelloJackie,I'mAillo
二、String.Format的多格式定义:
这里所谓的多格式是指一个格式项中可以定义1~3个格式参数,每种格式参数用分号(;)隔开。带2个和3个格式参数的格式项所对应的值必须是数值类型的,这样才能判断是否为负数、正数、零。
带1个格式参数:
doublep1=1000000;
Response.Write(String.Format("{0:E2}",p1));
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));
负数则为第二中格式;
值等于零则为第三种格式*/
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个小数的数字;
与此类似:
F或者f表示固定点
E或者e表示科学计数法
D或者d表示十进制数
X或者x表示十六进制
G或者g表示常规
C或者c表示货币
IFormatProvider由NumberFormatInfo和DateTimeFormatInfo实现。NumberFormatInfo提供用于格式化基本数据类型的数字的区域性特定信息,而DateTimeFormatInfo提供用于格式化日期和时间值的区域性特定信息。
NumberFormatInfo属性:
格式字符 | 说明和关联属性 |
---|---|
c、C | 货币格式。 |
d、D | 十进制格式。 |
e、E | 科学计数(指数)格式。 |
f、F | 固定点格式。 |
g、G | 常规格式。 |
n、N | 数字格式。 |
r、R | 往返格式,这确保将已转换成字符串的数字转换回数字时具有与原数字相同的值。 |
x、X | 十六进制格式。 |
该类实现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 | |
D | |
f | 完整日期和时间(长日期和短时间) |
F | |
g | 常规(短日期和短时间) |
G | 常规(短日期和长时间) |
m、M | |
r、R | |
s | 使用当地时间的 |
t | |
T | |
u | |
U | 使用通用时间的完整日期和时间(长日期和长时间) |
y、Y |
格式模式 | 说明 |
---|---|
d、%d | 月中的某一天。一位数的日期没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%d”。 |
dd | 月中的某一天。一位数的日期有一个前导零。 |
ddd | 周中某天的缩写名称,在 |
dddd | 周中某天的完整名称,在 |
M、%M | 月份数字。一位数的月份没有前导零。如果该格式模式没有与其他格式模式组合,则指定“%M”。 |
MM | 月份数字。一位数的月份有一个前导零。 |
MMM | 月份的缩写名称,在 |
MMMM | 月份的完整名称,在 |
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 | 在 |
tt | 在AMDesignator或PMDesignator中定义的AM/PM指示项(如果存在)。 |
z、%z | 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。例如,太平洋标准时间是“-8”。如果该格式模式没有与其他格式模式组合,则指定“%z”。 |
zz | 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。 |
zzz | 完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。 |
: | 在 |
/ | 在 |
%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或
该类实现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]