日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
談?wù)凜#日期格式化和數(shù)字格式化的實(shí)現(xiàn)

字符串格式化這部分內(nèi)容是我們經(jīng)常用到的,如“2008-03-26”日期格式、“28.20”數(shù)字格式。

成都創(chuàng)新互聯(lián)歡迎來電:13518219792,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)網(wǎng)頁制作領(lǐng)域十載,包括報(bào)廢汽車回收等多個(gè)行業(yè)擁有多年的網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),選擇成都創(chuàng)新互聯(lián),為網(wǎng)站保駕護(hù)航。

舉一個(gè)例子,我們有時(shí)需要將訂單號“12”顯示為“00000012”這種樣式(不足8位前面補(bǔ)0),就可以使用下面的方法:

 
 
 
  1. intoriginalCode=12;  
  2. Response.Write(string.Format("{0:00000000}",originalCode)); 

或者

 
 
 
  1. intoriginalCode=12; 

Response.Write(originalCode.ToString("00000000"))又如我們在使用日期做為某種關(guān)鍵字時(shí),比如圖片的文件名,一般是到秒級,如“20080326082708”Response.Write(DateTime.Now.ToString("yyyyMMddHHmmss"));//輸出:20080326082708

這樣如果并發(fā)操作比較多的話,就會產(chǎn)生文件重名的現(xiàn)象。我們可以將日期精確到1/10000000秒,這樣的話重名的可能性就很小了。

 
 
 
  1. Response.Write(DateTime.Now.ToString("yyyyMMddHHmmssfffffff"));//輸出:200803260827087983268 

格式

基本內(nèi)容是:可以在Console.WriteLine(以及String.Format,它被Console.WriteLine調(diào)用)中的格式字符串內(nèi)的括號中放入非索引數(shù)字的內(nèi)容。格式規(guī)范的完整形式如下:

 
 
 
  1. {index[,width][:formatstring]} 

其中,index是此格式程序引用的格式字符串之后的參數(shù),從零開始計(jì)數(shù);width(如果有的話)是要設(shè)置格式的字段的寬度(以空格計(jì))。width取正數(shù)表示結(jié)果右對齊,取負(fù)數(shù)則意味著數(shù)字在字段中左對齊。(請參閱下面的前兩個(gè)示例。)

formatstring是可選項(xiàng),其中包含有關(guān)設(shè)置類型格式的格式說明。如果對象實(shí)現(xiàn)IFormattable,formatstring就會傳遞給對象的Format方法(在Beta2和后續(xù)版本中,該方法的簽名變?yōu)門oString(string,IFormatProvider),但功能不變)。如果對象不實(shí)現(xiàn)IFormattable,就會調(diào)用Object.ToString(),而忽略formatstring。

另請注意,在Beta1中不區(qū)分當(dāng)前語言的ToString在Beta2和后續(xù)版本中“將”區(qū)分語言。例如,對于用“.”分隔千位,用“,”分隔小數(shù)的國家,1,234.56將會格式化成1.234,56。如果您需要結(jié)果無論在什么語言下都是一樣的,就請使用CultureInfo.InvariantCulture作為語言。

若要獲取有關(guān)格式的完整信息,請查閱“.NET框架開發(fā)人員指南”中的格式概述(英文)。

數(shù)字格式

請注意,數(shù)字的格式是區(qū)分語言的:分隔符以及分隔符之間的空格,還有貨幣符號,都是由語言決定的—默認(rèn)情況下,是您計(jì)算機(jī)上的默認(rèn)語言。默認(rèn)語言與執(zhí)行線程相關(guān),可以通過Thread.CurrentThread.CurrentCulture了解和設(shè)置語言。有幾種方法,可以不必僅為一種給定的格式操作就立即更改語言。

內(nèi)置類型的字母格式

有一種格式命令以單個(gè)字母開頭,表示下列設(shè)置:

G—常規(guī),E或F中較短的

F—浮點(diǎn)數(shù),常規(guī)表示法

E—用E表示法表示的浮點(diǎn)數(shù)(其中,E代表10的次冪)

N—帶有分隔符的浮點(diǎn)數(shù)(在美國為逗號)

C—貨幣,帶有貨幣符號和分隔符(在美國為逗號)

D—十進(jìn)制數(shù),僅用于整型

X—十六進(jìn)制數(shù),僅用于整型

字母可以后跟一個(gè)數(shù)字,根據(jù)字母的不同,該數(shù)字可以表示總位數(shù)、有效位數(shù)或小數(shù)點(diǎn)后面的位數(shù)。

下面是字母格式的一些示例:

 
 
 
  1. doublepi=Math.PI;  
  2. doublep0=pi*10000;  
  3. inti=123;  
  4. Console.WriteLine("浮點(diǎn)格式,無分隔符(逗號)");  
  5. Console.WriteLine("pi,Left{0,-25}",pi);//3.1415926535897931  
  6. Console.WriteLine("p0,Rt.{0,25}",p0);//3.1415926535897931  
  7. Console.WriteLine("pi,E{0,25:E}",pi);//3.1416E+000  
  8. Console.WriteLine("使用E和F格式,小數(shù)點(diǎn)后保留n(此處為4)位");  
  9. Console.WriteLine("pi,E4{0,25:E4}",pi);//3.1416E+000  
  10. Console.WriteLine("pi,F4{0,25:F4}",pi);//3.1416  
  11. Console.WriteLine("使用G格式,保留4位有效數(shù)字——如果需要請使用E格式");  
  12. Console.WriteLine("pi,G4{0,25:G4}",pi);//3.142  
  13. Console.WriteLine("p0,G4{0,25:G4}",p0);//3.142E4  
  14. Console.WriteLine("N和C格式帶有逗號(分隔符),"+  
  15. "默認(rèn)小數(shù)點(diǎn)后保留兩位,四舍五入。");  
  16. Console.WriteLine("p0,N{0,25:N}",p0);//31,415.93  
  17. Console.WriteLine("p0,N4{0,25:N4}",p0);//31,415.9265  
  18. Console.WriteLine("p0,C{0,25:C}",pi);//?$3.14  
  19. Console.WriteLine("D和X格式僅用于整型,"+  
  20. "非整型將產(chǎn)生格式異常——X指十六進(jìn)制");  
  21. Console.WriteLine("i,D{0,25:D}",i);//123  
  22. Console.WriteLine("i,D7{0,25:D7}",i);//0000123  
  23. Console.WriteLine("i,X{0,25:X}",i);//7B  
  24. Console.WriteLine("i,X8{0,25:X8}",i);//0000007B 

圖片格式

與字母格式不同,formatstring可以包含“圖片格式”。下面是從代碼中摘錄的幾個(gè)實(shí)例。(這類似于Basic中的“PrintUsing”語句。)圖片格式功能甚至包括以不同方式設(shè)置負(fù)數(shù)、正數(shù)和零的格式的能力。還有幾個(gè)圖片格式功能,下面的示例中未包括在內(nèi)。有關(guān)詳細(xì)信息,請參閱“.NET框架開發(fā)人員指南”或文檔中的主題圖片格式數(shù)字串(英文)。

在下例中您將注意到,好心的博士既使用了“#”字符,又使用了“0”字符。如果相應(yīng)的數(shù)字是前導(dǎo)零或尾隨零,“#”字符就會替換為空值。無論相應(yīng)數(shù)字的值如何,“0”字符都會被替換為零字符—因此,數(shù)字將會被零填補(bǔ)。句號(如果有的話)表示小數(shù)分隔符的位置。

那么,為什么要同時(shí)使用這些字母,比如“###0.##”?如果要設(shè)置格式的值恰好為零,“#”圖片字符就被替換為“無”(連零字符也不是)。您可能“總是”希望在小數(shù)點(diǎn)的左邊至少有一個(gè)“0”,否則,如果值為零,字段就沒有輸出。換言之,僅包含“#”字符,一個(gè)“0”也沒有的格式常被認(rèn)為是一個(gè)編程錯(cuò)誤。
逗號有兩種用法:如果一個(gè)逗號或一組逗號緊跟在句號的左邊(或者沒有句號時(shí)在結(jié)尾),它們就會告訴格式化程序分隔10**(3*n)所顯示的數(shù)字,其中,n是逗號的個(gè)數(shù)。換言之,數(shù)字按千位、百萬位、十億位等分隔。

如果逗號的右側(cè)至少有一個(gè)“0”或“#”占位符,它就會告訴格式化程序在各數(shù)位組之間放置適當(dāng)?shù)慕M分隔符字符(在美國為逗號。)(在美國,每三個(gè)數(shù)位算一組。)

可以設(shè)置百分比的格式,方法是在圖片中放入“%”?!?”將在指定的位置顯示,在顯示前數(shù)字將被乘以100(這樣,0.28就變成了28%)。

如果希望將圖片格式用于指數(shù)表示法,可以指定“e”或“E”后跟加號或減號,再后跟任意個(gè)零,比如“E+00”或“e-000”。如果使用“e”,則顯示小寫“e”。如果使用“E”,則顯示大寫“E”。如果使用加號,則指數(shù)的符號總是出現(xiàn)。如果使用減號,則符號只有在指數(shù)為負(fù)數(shù)時(shí)才會顯示。(Beta1版在處理“-”時(shí)有問題,該符號會導(dǎo)致負(fù)號總是出現(xiàn)。)

根據(jù)要設(shè)置格式的數(shù)字的符號,還有一個(gè)條件格式。在格式字符串中僅包含兩個(gè)或三個(gè)獨(dú)立的格式,它們由分號分隔。如果有兩個(gè)格式,則第一個(gè)將用于非負(fù)數(shù),第二個(gè)用于負(fù)數(shù)。如果有三個(gè)格式,則第一個(gè)將用于正數(shù),第二個(gè)用于負(fù)數(shù),第三個(gè)用于零。

可以在格式字符串中包含文字字符。如果所需的字符具有特殊意義,請?jiān)谄淝懊媸褂梅葱备芊?,使其“轉(zhuǎn)義”。例如,如果希望在不乘以100的情況下顯示百分比符號,就可以在數(shù)字前面使用反斜杠(在C++和C#中必須使用兩個(gè)反斜杠),比如“#0.##\%”。(如果正在使用C#,就可以使用極酷的逐字字符串文字,比如@"#0.##%"。)或者,也可以將字符串放入單引號或雙引號中,以避免將其字符解釋為格式命令。在Beta2及更高版本中,可以通過使用雙括號,從而在格式字符串中包含文字括號。

下面是有關(guān)圖片格式的一些示例:

 
 
 
  1. longm34=34000000;//34,000,000  
  2. Console.WriteLine("幾種圖片格式");  
  3. Console.WriteLine("如果沒有數(shù)位,0將打印0;"+  
  4. "諸如i:的文字總是打印");  
  5. Console.WriteLine("t句點(diǎn)代表小數(shù)分隔符的位置");  
  6. Console.WriteLine("i,i:0000.0{0,10:i:0000.0}",i);//  
  7. i:0123.0  
  8. Console.WriteLine("如果沒有有效數(shù)字#將不顯示,"+  
  9. "逗號意味著放入分隔符");  
  10. Console.WriteLine("請確保在數(shù)字圖片中至少使用一個(gè)0。");  
  11. Console.WriteLine("p0,##,##0.#{0,10:##,##0.#}",-p0);//-31,415.9  
  12. Console.WriteLine("m34,0,,{0,10:0,,百萬}",m34);//34百萬  
  13. Console.WriteLine("p0,#0.#E+00{0,10:#0.#E+00}",p0);//31.4E+03  
  14. Console.WriteLine("%乘以100并打印百分號");  
  15. Console.WriteLine("pi,###0.##%{0,10:###0.##%}",pi);//314.16%  
  16. Console.WriteLine("因?yàn)閈而沒有進(jìn)行乘法運(yùn)算"+  
  17. "(注意:兩個(gè)反斜線?。?);  
  18. Console.WriteLine("pi,###0.##\\%{0,10:###0.##\%}",pi);//3.14%  
  19. Console.WriteLine("與C#的逐字字符串相同");  
  20. Console.WriteLine(@"pi,###0.##\%{0,10:###0.##%}",pi);//3.14%  
  21. Console.WriteLine("10,'#'#0{0,10:'#'#0}",10);//#10  
  22. Console.WriteLine("基于符號的條件格式");  
  23. Console.WriteLine("如果是0或正數(shù)打印#,如果是負(fù)數(shù)打印(#)");  
  24. Console.WriteLine("-50;(0){0,10:0;(0)}",-5);//(5)  
  25. Console.WriteLine("如果是正數(shù)打印#,如果是負(fù)數(shù)打印-#,如果是0打印zip");  
  26. Console.WriteLine("00;-0;zip{0,10:0;-0;zip}",0);//zip 

如您所見,格式功能非常強(qiáng)大。

格式的工作方式

文檔中的示例對所傳遞的對象類型的變量調(diào)用Format方法。對這些Format方法僅傳遞格式規(guī)范的formatstring部分,而不傳遞index和width。(在Beta2中,對Format的調(diào)用將改為對ToString的調(diào)用。)

index和width由String.Format(它被Console.Write和Console.WriteLine調(diào)用)使用,以獲得調(diào)用Format的正確對象以及將該調(diào)用的結(jié)果左或右對齊。(順便說一下,如果要設(shè)置格式的對象不實(shí)現(xiàn)IFormattable(并因此調(diào)用Format方法),String.Format將調(diào)用對象的ToString()方法,而忽略formatstring。)

換言之,Console.WriteLine調(diào)用String.Format,傳遞向它傳遞的所有參數(shù)。String.Format分析字符串,查找“{”字符。找到該字符后,它將分析子字符串直到第一個(gè)“}”為止,以確定index數(shù)、width和formatstring。然后,它按照index訪問相應(yīng)的參數(shù),并調(diào)用其Format方法,傳遞“{}”段中的formatstring部分。(如果參數(shù)對象不實(shí)現(xiàn)IFormattable,則被調(diào)用的是ToString。)

無論是實(shí)現(xiàn)還是不實(shí)現(xiàn),都會返回一個(gè)字符串,并且String.Format在繼續(xù)分析格式字符串之前會將其與結(jié)果字符串連接。之后,String.Format將生成的帶格式字符串返回給Console.WriteLine,由Console.WriteLine進(jìn)行顯示。

對于Beta2及更高版本,對象的Format方法(它是IFormattable中的Format方法)被ToString所替代,ToString獲取一個(gè)格式字符串和一個(gè)IFormatProvider(或null)。但String.Format仍存在,因此這些調(diào)用將不改變。

自定義格式

您自己也可以編寫格式化程序,用于自己的類型或作為內(nèi)置類型的自定義格式化程序,如“.NET框架開發(fā)人員指南”中的自定義Format方法所說明的那樣。如果編寫內(nèi)置類型的自定義格式化程序,就不能從Console.WriteLine中使用它,但可以通過調(diào)用String.Format的重載而使用它,String.Format的重載將采用IServiceObjectProvider(在beta2及更高版本中稱為IFormatProvider)作為參數(shù)。

C#日期格式化和時(shí)間格式

您將記起,有一個(gè)叫做DateTime的類,用于保存日期和時(shí)間。像您所猜想的那樣,有大量方法可供設(shè)置DateTime對象的格式:僅日期、僅時(shí)間、世界時(shí)或本地時(shí)、若干種日/月/年順序,甚至可分類。C#日期格式化和時(shí)間格式是區(qū)分語言的。

還可以使用自定義格式字符串來設(shè)置DateTime對象的格式。這種字符串將包含由某些字母組成的區(qū)分大小寫的子字符串,以表示日期和時(shí)間的各個(gè)不同部分,如星期幾、幾號、月份、年份、紀(jì)元、小時(shí)、分鐘、秒或時(shí)區(qū)。這些部分中有許多具有多種格式,例如,M是沒有前導(dǎo)零的數(shù)字月份,MM是有前導(dǎo)零的數(shù)字月份,MMM是三個(gè)字母的月份縮寫,MMMM是所在國家語言對應(yīng)的完整月份名稱的拼寫。在“.NET框架參考”中可以找到自定義和標(biāo)準(zhǔn)格式字符的完整列表。

下面是有關(guān)C#日期格式化和時(shí)間格式的一個(gè)示例:

 
 
 
  1. longm34=34000000;//34,000,000  
  2. Console.WriteLine("幾種圖片格式");  
  3. Console.WriteLine("如果沒有數(shù)位,0將打印0;"+  
  4. "諸如i:的文字總是打印");  
  5. Console.WriteLine("t句點(diǎn)代表小數(shù)分隔符的位置");  
  6. Console.WriteLine("i,i:0000.0{0,10:i:0000.0}",i);//  
  7. i:0123.0  
  8. Console.WriteLine("如果沒有有效數(shù)字#將不顯示,"+  
  9. "逗號意味著放入分隔符");  
  10. Console.WriteLine("請確保在數(shù)字圖片中至少使用一個(gè)0。");  
  11. Console.WriteLine("p0,##,##0.#{0,10:##,##0.#}",-p0);//-31,415.9  
  12. Console.WriteLine("m34,0,,{0,10:0,,百萬}",m34);//34百萬  
  13. Console.WriteLine("p0,#0.#E+00{0,10:#0.#E+00}",p0);//31.4E+03  
  14. Console.WriteLine("%乘以100并打印百分號");  
  15. Console.WriteLine("pi,###0.##%{0,10:###0.##%}",pi);//314.16%  
  16. Console.WriteLine("因?yàn)閈而沒有進(jìn)行乘法運(yùn)算"+  
  17. "(注意:兩個(gè)反斜線?。?);  
  18. Console.WriteLine("pi,###0.##\\%{0,10:###0.##\%}",pi);//3.14%  
  19. Console.WriteLine("與C#的逐字字符串相同");  
  20. Console.WriteLine(@"pi,###0.##\%{0,10:###0.##%}",pi);//3.14%  
  21. Console.WriteLine("10,'#'#0{0,10:'#'#0}",10);//#10  
  22. Console.WriteLine("基于符號的條件格式");  
  23. Console.WriteLine("如果是0或正數(shù)打印#,如果是負(fù)數(shù)打印(#)");  
  24. Console.WriteLine("-50;(0){0,10:0;(0)}",-5);//(5)  
  25. Console.WriteLine("如果是正數(shù)打印#,如果是負(fù)數(shù)打印-#,如果是0打印zip");  
  26. Console.WriteLine("00;-0;zip{0,10:0;-0;zip}",0);//zip 

【編輯推薦】

  1. C# 4.0 Dynamic關(guān)鍵字全解析
  2. 淺談C#中構(gòu)造函數(shù)和成員函數(shù)
  3. C#回調(diào)函數(shù)及API應(yīng)用淺析
  4. 詳解C# Object.Equals函數(shù)
  5. C#調(diào)用Windows API函數(shù)

本文名稱:談?wù)凜#日期格式化和數(shù)字格式化的實(shí)現(xiàn)
路徑分享:http://www.dlmjj.cn/article/dhgicde.html