C#学习-数值与⽇期的ToString()格式汇总
起因
在开发过程中,涉及到通过使⽤枚举类型来优化接⼝。因为要与 ⼊参/出参 做对⽐ 对 出库/⼊库 string类型变量赋值等。其中的转换感觉实在不⽅便,甚是奇怪,既然被推荐转换成枚举做处理进⾏优化的话,应该是变得⽅便才对。专门请教前辈,学习到下⾯的⽅法。
string testA= AfterSaleIsAcceptanceEnum.End.ToString(“D”);
string testB = ((int)AfterSaleIsAcceptanceEnum.End).ToString();
A为学习到的,B为⾃⼰⼀开始⽤到的。
在此专门扩展学习⼀下。⽤好了感觉是很⽅便的。ToString⽤的太经常反⽽忘记了它的扩展。
下⾯是专门搜集后,发现搜索的结果杂七杂⼋,⾃⼰整理到的结果。
.ToString()
Int OR Double 等数字类型
格式符应⽤含义使⽤⽰例显⽰⽰例
C数字类型货币 2.5.ToString(“C”)¥2.50
D只⽤于整型⼗进制25.ToString(“D5”)00025
E数字类型科学型25000.ToString(“E”) 2.500000E+005
F数字类型⼩数点后位数25.ToString(“F2”)25.00
G数字类型常规 2.5.ToString(“G”) 2.5
N数字类型数字4384.5.ToString(“N”)4,384.50 (UK/USA)/4 384,50 (欧洲⼤陆)
X只⽤于整型⼗六进制255.ToString(“X”)1120 (如果要显⽰0x1120,需要写上0x)
P数字类型百分⽐255.ToString(“P”)255.00%
Dates
Note that date formatting is especially dependant on the system’s regional settings; the example strings here are from my local locale.
注意,⽇期格式化特别依赖于系统的区域设置;这⾥的⽰例字符串来⾃我的本地地区。
格式符类型⽰例(System.DateTime.Now)
d Short date10/12/2002
D Long date December 10, 2002
t Short time10:11 PM
T Long time10:11:29 PM
f Full date & time December 10, 2002 10:11 PM
F Full date & time (long)December 10, 2002 10:11:29 PM
g Default date & time10/12/2002 10:11 PM
G Default date & time (long)10/12/2002 10:11:29 PM
M Month day pattern December 10
r RFC1123 date string Tue, 10 Dec 2002 22:11:29 GMT
s Sortable date string2002-12-10T22:11:29
s Sortable date string2002-12-10T22:11:29格式符类型⽰例(System.DateTime.Now)u Universal sortable, local time2002-12-10 22:13:50Z
U Universal sortable, GMT December 11, 2002 3:13:50 AM
Y Year month pattern December, 2002
The ‘U’ specifier seems broken; that string certainly isn’t sortable
“u”说明符似乎是坏的;字符串当然不是可排序的。
DateTime.ToString( "d"); // 返回 DateTime 值;“d”是标准短⽇期模式。
DateTime.ToString( "%d"); // 返回⽉中的某天;“%d”是⾃定义模式。
DateTime.ToString( "d "); // 返回后⾯跟有⼀个空⽩字符的⽉中的某天;“d”是⾃定义模式。
拓展
拓展1:固定长度⼀个数值。【.ToString().PadLeft()】
⽰例:
i=1;
i.ToString().PadLeft(10,‘0’);
固定长度为10,左不⾜补0,结果为0000000001;
i.ToString(“N”).PadLeft(10,‘0’);
结果为00000001.00;
i.ToString().PadLeft(10,’ ');
结果为 1;
拓展2:⾃定义数字格式字符串。【.ToString(“###,###,###,##0”)】
#是如果有数字的话就显⽰,没数字的话是空;0是如果有数字的话就显⽰,没数字的话是显⽰为0。
⽰例1:
public string GetFormateString(int Precision, double Number)
{
string text = "###,###,###,##0.";
for (int i = 0; i < Precision; i++)
{
text += "0";
}
return Number.ToString(text);
}
string Money = Math.Round((decimal)SurplusMoney, 2).ToString("#0.00");
stringstr11 =(56789 / 100.0).ToString("#.##"); //result: 567.89
stringstr12 =(56789 / 100).ToString("#.##"); //result: 567
上⾯例⼦是将decimal类型的⾦额转换为string类型,以达到前端可以展⽰如”20.00¥“的效果。
拓展3:⽇期转换字符串。
⽰例:
DateTime dt = DateTime.Now;
dt.ToString();//2005-11-5 13:21:25
dt.ToFileTime().ToString();//127756416859912816
dt.ToFileTimeUtc().ToString();//127756704859912816
dt.ToLocalTime().ToString();//2005-11-5 21:21:25
dt.ToLongDateString().ToString();//2005年11⽉5⽇
dt.ToLongTimeString().ToString();//13:21:25
dt.ToOADate().ToString();//38661.5565508218
dt.ToShortDateString().ToString();//2005-11-5
dt.ToShortTimeString().ToString();//13:21
dt.ToUniversalTime().ToString();//2005-11-5 5:21:25
dt.Year.ToString();//2005
dt.Date.ToString();//2005-11-5 0:00:00
dt.DayOfWeek.ToString();//Saturday
dt.DayOfYear.ToString();//309
dt.Hour.ToString();//13
dt.Millisecond.ToString();//441
dt.Minute.ToString();//30
dt.Month.ToString();//11
dt.Second.ToString();//28
dt.Ticks.ToString();//632667942284412864
dt.TimeOfDay.ToString();//13:30:28.4412864
dt.ToString();//2005-11-5 13:47:04
dt.AddYears(1).ToString();//2006-11-5 13:47:04
dt.AddDays(1.1).ToString();//2005-11-6 16:11:04
dt.AddHours(1.1).ToString();//2005-11-5 14:53:04
dt.AddMilliseconds(1.1).ToString();//2005-11-5 13:47:04
dt.AddMonths(1).ToString();//2005-12-5 13:47:04
dt.AddSeconds(1.1).ToString();//2005-11-5 13:47:05
dt.AddMinutes(1.1).ToString();//2005-11-5 13:48:10
dt.AddTicks(1000).ToString();//2005-11-5 13:47:04
dt.CompareTo(dt).ToString();//0
dt.Add(?).ToString();//问号为⼀个时间段
dt.Equals("2005-11-6 16:11:04").ToString();//False
dt.Equals(dt).ToString();//True
dt.GetHashCode().ToString();//1474088234
dt.GetType().ToString();//System.DateTime
dt.GetTypeCode().ToString();//DateTime
// 计算2个⽇期之间的天数差
DateTime dt1 = Convert.DateTime("2007-8-1");
DateTime dt2 = Convert.DateTime("2007-8-15");
TimeSpan span = dt2.Subtract(dt1);
int dayDiff = span.Days + 1;
// 计算某年某⽉的天数
int days = DateTime.DaysInMonth(2007, 8);
days = 31;
// 给⽇期增加⼀天、减少⼀天
DateTime dt = DateTime.Now;
dt.AddDays(1); //增加⼀天
dt.AddDays(-1);//减少⼀天
拓展4:Custom number formatting . ⾃定义数字格式化。【String.Format("{}",)】⽆意中看到的,尚未实际⽤到过。是纯英⽂的,特此翻译后记录,也许哪天就⽤到了。
Specifier(格
式符)Type(类型)
Example(例
⼦)
Output (Passed Double
1500.42)(输出)
Note(注释)
0Zero placeholder(零占位符){0:00.0000}1500.4200Pads with zeroes.
#Digit placeholder(数字占位
符)
{0:(#).##}(1500).42
.Decimal point(⼩数点){0:0.0}1500.4
,Thousand separator(千分分
离器)
{0:0,0}1,500Must be between two zeroes.
,.Number scaling(数标度){0:0,.}2Comma adjacent to Period scales
by 1000.
%Percent(百分⽐){0:0%}150042%Multiplies by 100, adds % sign.
e Exponent placeholder(指数
占位符)
{0:00e+0}15e+2Many exponent formats available.
;
Group separator(分组分割
符)
see below
Specifier(格
式符)Type(类型)
Example(例
⼦)
Output (Passed Double
1500.42)(输出)
Note(注释)
The group separator is especially useful for formatting currency values which require that negative values be enclosed in parentheses.
组分隔符对于要求负值⽤括号括起来的格式化的货币值特别有⽤。
⽰例1:
stringstr1 =string.Format("{0:N1}",56789); //result: 56,789.0
stringstr2 =string.Format("{0:N2}",56789); //result: 56,789.00
stringstr3 =string.Format("{0:N3}",56789); //result: 56,789.000
stringstr8 =string.Format("{0:F1}",56789); //result: 56789.0
stringstr9 =string.Format("{0:F2}",56789); //result: 56789.00
//C 或 c
//货币
Console.Write("{0:C}", 2.5); //$2.50
Console.Write("{0:C}", -2.5); //($2.50)
/
/D 或 d
//⼗进制数
Console.Write("{0:D5}", 25); //00025
//E 或 e
//科学型
Console.Write("{0:E}", 250000); //2.500000E+005
//F 或 f
//固定点
Console.Write("{0:F2}", 25); //25.00
Console.Write("{0:F0}", 25); //25
//G 或 g
/
/常规
Console.Write("{0:G}", 2.5); //2.5
//N 或 n
//数字
Console.Write("{0:N}", 2500000); //2,500,000.00
//X 或 x
//⼗六进制
Console.Write("{0:X}", 250); //FA
Console.Write("{0:X}", 0xffff); //FFFF
⽰例2:
using System;
namespace ToStringFormat
{
class Program
{
static void Main(string[] args)
{
//按照中国⼈习惯标准转化
//按照中国⼈习惯标准转化
System.Globalization.CultureInfo Culinfo = System.Globalization.CultureInfo.CreateSpecificCulture("zh-Cn");
//【C或c】,数字转换为表⽰货币⾦额的字符串。转换由当前 NumberFormatInfo 对象的货币格式信息控制。
//精度说明符指⽰所需的⼩数位数。如果省略精度说明符,则使⽤当前 NumberFormatInfo 对象给定的默认货币精度。
Console.WriteLine("(2.5).ToString('C'):" + (2.5).ToString("C", Culinfo)); //¥2.5
Console.WriteLine("(2.5).ToString('C2'):" + (2.5).ToString("C2", Culinfo)); //¥2.50
Console.WriteLine("(2.5).ToString('C3'):" + (2.5).ToString("C3", Culinfo)); //¥2.500
Console.WriteLine("*************************************************************");
//【D 或 d】,只有整型才⽀持此格式。数字转换为⼗进制数字 (0-9) 的字符串,如果数字为负,则前⾯加负号。
//精度说明符指⽰结果字符串中所需的最少数字个数。如果需要的话,则⽤零填充该数字的左侧,以产⽣精度说明符给定的数字个数。
Console.WriteLine("(25).ToString('D'):" + (25).ToString("D", Culinfo)); //25
Console.WriteLine("(25).ToString('D3'):" + (25).ToString("D3", Culinfo)); //025
Console.WriteLine("(25).ToString('D4'):" + (25).ToString("D4", Culinfo)); //0025
Console.WriteLine("(25).ToString('D5'):" + (25).ToString("D5", Culinfo)); //00025
Console.WriteLine("*************************************************************");
//【E 或 e】,数字转换为“-d.ddd…E+ddd”或“-d.ddd…e+ddd”形式的字符串,其中每个“d”表⽰⼀个数字 (0-9)。如果该数字为负,则该字符串以减号开头。⼩数点前总有⼀个数字。精度说明符指⽰⼩数点后所需的位数。如果省略精度说明符,则使⽤默认值,即⼩数点后六位数字。
//格式说明符的⼤⼩写指⽰在指数前加前缀“E”还是“e”。指数总是由正号或负号以及最少三位数字组成。如果需要,⽤零填充指数以满⾜最少三位数字的要求。
Console.WriteLine("(25000).ToString('E'):" + (25000).ToString("E", Culinfo)); //2.500000E+004
Console.WriteLine("(25000).ToString('E2'):" + (25000).ToString("E2", Culinfo)); //2.50E+004
Console.WriteLine("(25000).ToString('E3'):" + (25000).ToString("E3", Culinfo)); //2.500E+004
Console.WriteLine("(25000).ToString('e'):" + (25000).ToString("e", Culinfo)); //2.500000e+004
Console.WriteLine("(25000).ToString('e2'):" + (25000).ToString("e2", Culinfo)); //2.50e+004
Console.WriteLine("(25000).ToString('e3'):" + (25000).ToString("e3", Culinfo)); //2.500e+004
Console.WriteLine("*************************************************************");
//【F 或 f】,数字转换为“-ddd.ddd…”形式的字符串,其中每个“d”表⽰⼀个数字 (0-9)。如果该数字为负,则该字符串以减号开头。
//精度说明符指⽰所需的⼩数位数。如果忽略精度说明符,则默认数值精度由当前 NumberFormatInfo 对象的 NumberDecimalDigits 属性给定。
Console.WriteLine("(25).ToString('F0'):" + (25).ToString("F0", Culinfo)); //25
writeline输出数值变量Console.WriteLine("(25).ToString('F1'):" + (25).ToString("F1", Culinfo)); //25.0
Console.WriteLine("(25).ToString('F2'):" + (25).ToString("F2", Culinfo)); //25.00
Console.WriteLine("*************************************************************");
//【G 或 g】,根据数字类型以及是否存在精度说明符,数字会转换为定点或科学记数法的最紧凑形式。
如果精度说明符被省略或为零,则数字的类型决定默认精度,如下表所⽰。
//Byte 或 SByte:3
//Int16 或 UInt16:5
//Int32 或 UInt32:10
//Int64 或 UInt64:19
//Single:7
//Double:15
//Decimal:29
//如果⽤科学记数法表⽰数字时指数⼤于 -5 ⽽且⼩于精度说明符,则使⽤定点表⽰法;否则使⽤科学记数法。如果要求有⼩数点,并且忽略尾部零,则结果包含⼩数点。如果精度说明符存在,并且结果的有效数字位数超过指定精度,则通过舍⼊删除多余的尾部数字。
//如果数字是 Decimal 并且省略精度说明符,上述规则存在⼀个例外。在这种情况下总使⽤定点表⽰
法并保留尾部零。
//使⽤科学记数法时,如果格式说明符是“G”,结果的指数带前缀“E”;如果格式说明符是“g”,结果的指数带前缀“e”。
Console.WriteLine("(2.5).ToString('G'):" + (250).ToString("G", Culinfo)); //250
Console.WriteLine("(2.5).ToString('G1'):" + (250).ToString("G1", Culinfo)); //3E+02
Console.WriteLine("(2.5).ToString('G2'):" + (250).ToString("G2", Culinfo)); //2.5E+02
Console.WriteLine("(2.5).ToString('G3'):" + (250).ToString("G3", Culinfo)); //250
Console.WriteLine("*************************************************************");
//【N 或 n】,数字转换为“-d,ddd,ddd.ddd…”形式的字符串,其中“-”表⽰负数符号(如果需要),“d”表⽰数字 (0-9),“,”表⽰数字组之间的千位分隔符,“.”表⽰⼩数点符号。实际的负数模式、数字组⼤⼩、千位分隔符以及⼩数分隔符分别由当前 NumberFormatInfo 对象的 NumberNegativePattern、NumberGrou pSizes、NumberGroupSeparator 和 NumberDecimalSeparator 属性指定。
//精度说明符指⽰所需的⼩数位数。如果忽略精度说明符,则默认数值精度由当前 NumberFormatInfo 对象的 NumberDecimalDigits 属性给定。
Console.WriteLine("(250000).ToString('N'):" + (250000).ToString("N", Culinfo)); //250,000.00
Console.WriteLine("(250000).ToString('N1'):" + (250000).ToString("N1", Culinfo)); //250,000.0
Console.WriteLine("(250000).ToString('N3'):" + (250000).ToString("N3", Culinfo)); //250,000.000
Console.WriteLine("*************************************************************");
//【X 或 x】只有整型才⽀持此格式。数字转换为⼗六进制数字的字符串。格式说明符的⼤⼩写指⽰对⼤于 9 的⼗六进制数字使⽤⼤写字符还是⼩写字符。例如,使⽤“X”产⽣“ABCDEF”,使⽤“x”产⽣“abcdef”。
//精度说明符指⽰结果字符串中所需的最少数字个数。如果需要的话,则⽤零填充该数字的左侧,以产⽣精度说明符给定的数字个数。
Console.WriteLine("(25).ToString('X'):" + (25).ToString("X", Culinfo));//19
Console.WriteLine("(25).ToString('X4'):" + (25).ToString("X4", Culinfo));//19
Console.WriteLine("(25).ToString('X8'):" + (25).ToString("X8", Culinfo));//19
Console.WriteLine("*************************************************************");
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论