自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

談?wù)凜#日期格式化和數(shù)字格式化的實現(xiàn)

開發(fā) 后端
本文將談?wù)凜#日期格式化和數(shù)字格式化的實現(xiàn),這也是我們在C#編程過程中,經(jīng)常碰到的需要處理的問題。

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

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

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

或者

  1. intoriginalCode=12; 

Response.Write(originalCode.ToString("00000000"))又如我們在使用日期做為某種關(guān)鍵字時,比如圖片的文件名,一般是到秒級,如“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ù),從零開始計數(shù);width(如果有的話)是要設(shè)置格式的字段的寬度(以空格計)。width取正數(shù)表示結(jié)果右對齊,取負(fù)數(shù)則意味著數(shù)字在字段中左對齊。(請參閱下面的前兩個示例。)

formatstring是可選項,其中包含有關(guān)設(shè)置類型格式的格式說明。如果對象實現(xiàn)IFormattable,formatstring就會傳遞給對象的Format方法(在Beta2和后續(xù)版本中,該方法的簽名變?yōu)門oString(string,IFormatProvider),但功能不變)。如果對象不實現(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)情況下,是您計算機上的默認(rèn)語言。默認(rèn)語言與執(zhí)行線程相關(guān),可以通過Thread.CurrentThread.CurrentCulture了解和設(shè)置語言。有幾種方法,可以不必僅為一種給定的格式操作就立即更改語言。

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

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

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

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

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

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

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

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

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

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

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

  1. doublepi=Math.PI;  
  2. doublep0=pi*10000;  
  3. inti=123;  
  4. Console.WriteLine("浮點格式,無分隔符(逗號)");  
  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ù)點后保留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ù)點后保留兩位,四舍五入。");  
  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)生格式異?!猉指十六進(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可以包含“圖片格式”。下面是從代碼中摘錄的幾個實例。(這類似于Basic中的“PrintUsing”語句。)圖片格式功能甚至包括以不同方式設(shè)置負(fù)數(shù)、正數(shù)和零的格式的能力。還有幾個圖片格式功能,下面的示例中未包括在內(nèi)。有關(guān)詳細(xì)信息,請參閱“.NET框架開發(fā)人員指南”或文檔中的主題圖片格式數(shù)字串(英文)。

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

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

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

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

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

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

可以在格式字符串中包含文字字符。如果所需的字符具有特殊意義,請在其前面使用反斜杠符號,使其“轉(zhuǎn)義”。例如,如果希望在不乘以100的情況下顯示百分比符號,就可以在數(shù)字前面使用反斜杠(在C++和C#中必須使用兩個反斜杠),比如“#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句點代表小數(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ù)字圖片中至少使用一個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("因為\而沒有進(jìn)行乘法運算"+  
  17. "(注意:兩個反斜線!)");  
  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 

如您所見,格式功能非常強大。

格式的工作方式

文檔中的示例對所傳遞的對象類型的變量調(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è)置格式的對象不實現(xiàn)IFormattable(并因此調(diào)用Format方法),String.Format將調(diào)用對象的ToString()方法,而忽略formatstring。)

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

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

對于Beta2及更高版本,對象的Format方法(它是IFormattable中的Format方法)被ToString所替代,ToString獲取一個格式字符串和一個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#日期格式化和時間格式

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

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

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

  1. longm34=34000000;//34,000,000  
  2. Console.WriteLine("幾種圖片格式");  
  3. Console.WriteLine("如果沒有數(shù)位,0將打印0;"+  
  4. "諸如i:的文字總是打印");  
  5. Console.WriteLine("t句點代表小數(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ù)字圖片中至少使用一個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("因為\而沒有進(jìn)行乘法運算"+  
  17. "(注意:兩個反斜線?。?);  
  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ù)
責(zé)任編輯:彭凡 來源: xland.com.cn
相關(guān)推薦

2009-09-04 12:22:41

C#日期格式化

2009-07-30 16:23:07

C#日期格式化

2009-07-30 16:40:03

C#日期格式化

2009-09-03 14:20:21

C#日期格式化

2010-10-28 15:32:42

oracle日期格式化

2009-08-03 16:24:05

C#格式化

2009-09-04 11:19:40

C#數(shù)字格式化

2024-09-09 11:26:36

C#數(shù)字格式化

2009-09-03 14:28:23

C#日期格式化

2010-07-29 11:12:30

Flex日期格式化

2009-09-04 13:19:59

C#代碼格式化

2009-09-02 15:56:49

C#格式化字符串

2010-07-19 13:00:34

SQL Server日

2020-11-03 10:21:33

MySQL

2009-09-03 18:45:06

GridView格式化

2010-09-06 15:17:14

Sql函數(shù)

2009-07-02 10:14:15

格式化日期SQL Server

2024-01-08 22:03:22

python代碼開發(fā)

2022-05-09 08:17:37

InstantJava字符

2018-11-02 10:45:35

windowsU盤格式化
點贊
收藏

51CTO技術(shù)棧公眾號