String.format()的用法

DK1.5中,String類新增了一個很有用的靜態方法String.format():
format(Locale l, String format, Object... args) 使用指定的語言環境、格式字符串和參數返回一個格式化字符串。
format(String format, Object... args) 使用指定的格式字符串和參數返回一個格式化字符串。

舉幾個這個方法實用的例子(註釋是輸出結果):

CODE:

long now = System.currentTimeMillis();

String s = String.format("%tR", now);   // "15:12"

CODE:

// Current month/day/year

Date d = new Date(now);

s = String.format("%tD", d);                // "07/13/04"

CODE:

s = String.format("%,d", Integer.MAX_VALUE); // "2,147,483,647"

CODE:

s = String.format("%05d", 123);              // "00123"
是不是很方便,讓人動心啊?哈哈,還有更多的效果!

實在format函數有些類似c語言中printf函數,一些格式字符串與 C 類似,但已進行了某些定製,以適應 Java 語言,並且利用了其中一些特性。此方法提供了對佈局對齊和排列的支持,以及對數值、字符串和日期/時間數據的常規格式和特定於語言環境的輸出的支持。支持諸如 byte、BigDecimal 和 Calendar 等常見 Java 類型。

產生格式化輸出的每個方法都需要格式字符串 和參數列表。格式字符串是一個 String,它可以包含固定文本以及一個或多個嵌進的格式說明符。請考慮以下示例:

Calendar c = ...;
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);

格式字符串是 format 方法的第一個參數。它包含三個格式說明符 "%1$tm"、"%1$te" 和 "%1$tY",它們指出應該如何處理參數以及在文本的什麼地方插進它們。格式字符串的其餘部分是包括 "Dukes Birthday: " 和其他任何空格或標點符號的固定文本。 參數列表由傳遞給位於格式字符串之後的方法的所有參數組成。在上述示例中,參數列表的大小爲 1,由新對象 Calendar 組成。

1.常規類型、字符類型和數值類型的格式說明符的語法如下:%[argument_index$][flags][width][.precision]conversion

可選的 argument_index 是一個十進制整數,用於表明參數在參數列表中的位置。第一個參數由 "1$" 引用,第二個參數由 "2$" 引用,依此類推。
可選的 flags 是修改輸出格式的字符集。有效標誌的集合取決於轉換類型。
可選 width 是一個非負十進制整數,表明要向輸出中寫進的最少字符數。
可選 precision 是一個非負十進制整數,通常用來限制字符數。特定行爲取決於轉換類型。
所需的 conversion 是一個表明應該如何格式化參數的字符。給定參數的有效轉換集合取決於參數的數據類型。

2.用來表示日期和時間類型的格式說明符的語法如下:
%[argument_index$][flags][width]conversion

可選的 argument_index、flags 和 width 的定義同上。
所需的 conversion 是一個由兩字符組成的序列。第一個字符是 't' 或 'T'。第二個字符表明所使用的格式。這些字符類似於但不完全等同於那些由 GNU date 和 POSIX strftime(3c) 定義的字符。


3.與參數不對應的格式說明符的語法如下:
%[flags][width]conversion

可選 flags 和 width 的定義同上。
所需的 conversion 是一個表明要在輸出中所插內容的字符。

轉換
轉換可分爲以下幾類:
1. 常規 - 可應用於任何參數類型
2. 字符 - 可應用於表示 Unicode 字符的基本類型:char、Character、byte、Byte、short 和 Short。當 Character.isValidCodePoint(int) 返回 true 時,可將此轉換應用於 int 和 Integer 類型
3. 數值
      1. 整數 - 可應用於 Java 的整數類型:byte、Byte、short、Short、int、Integer、long、Long 和 BigInteger
      2. 浮點 - 可用於 Java 的浮點類型:float、Float、double、Double 和 BigDecimal
4. 日期/時間 - 可應用於 Java 的、能夠對日期或時間進行編碼的類型:long、Long、Calendar 和 Date。
5. 百分比 - 產生字面值 '%' ('\u0025')
6. 行分隔符 - 產生特定於平臺的行分隔符

下表總結了受支持的轉換。由大寫字符(如 'B'、'H'、'S'、'C'、'X'、'E'、'G'、'A' 和 'T')表示的轉換與由相應的小寫字符的轉換等同,根據流行的 Locale 規則將結果轉換爲大寫形式除外。後者等同於 String.toUpperCase() 的以下調用.

轉換 參數種別 說明
'b', 'B' 常規 假如參數 arg 爲 null,則結果爲 "false"。假如 arg 是一個 boolean 值或 Boolean,則結果爲 String.valueOf() 返回的字符串。否則結果爲 "true"。
'h', 'H' 常規 假如參數 arg 爲 null,則結果爲 "null"。否則,結果爲調用 Integer.toHexString(arg.hashCode()) 得到的結果。
's', 'S' 常規 假如參數 arg 爲 null,則結果爲 "null"。假如 arg 實現 Formattable,則調用 arg.formatTo。否則,結果爲調用 arg.toString() 得到的結果。
'c', 'C' 字符 結果是一個 Unicode 字符
'd' 整數 結果被格式化爲十進制整數
'o' 整數 結果被格式化爲八進制整數
'x', 'X' 整數 結果被格式化爲十六進制整數
'e', 'E' 浮點 結果被格式化爲用計算機科學記數法表示的十進制數
'f' 浮點 結果被格式化爲十進制數
'g', 'G' 浮點 根據精度和舍進運算後的值,使用計算機科學記數形式或十進制格式對結果進行格式化。
'a', 'A' 浮點 結果被格式化爲帶有效位數和指數的十六進制浮點數
't', 'T' 日期/時間 日期和時間轉換字符的前綴。請參閱日期/時間轉換。
'%' 百分比 結果爲字面值 '%' ('\u0025')
'n' 行分隔符 結果爲特定於平臺的行分隔符


任何未明確定義爲轉換的字符都是非法字符,並且都被保存,以供將來擴展使用。

日期/時間轉換
以下日期和時間轉換的後綴字符是爲 't' 和 'T' 轉換定義的。這些類型相似於但不完全等同於那些由 GNU date 和 POSIX strftime(3c) 定義的類型。提供其他轉換類型是爲了訪問特定於 Java 的功能(如將 'L' 用作秒中的毫秒)。

以下轉換字符用來格式化時間:

'H' 24 小時制的小時,被格式化爲必要時帶前導零的兩位數,即 00 - 23。
'I' 12 小時制的小時,被格式化爲必要時帶前導零的兩位數,即 01 - 12。
'k' 24 小時制的小時,即 0 - 23。
'l' 12 小時制的小時,即 1 - 12。
'M' 小時中的分鐘,被格式化爲必要時帶前導零的兩位數,即 00 - 59。
'S' 分鐘中的秒,被格式化爲必要時帶前導零的兩位數,即 00 - 60 ("60" 是支持閏秒所需的一個特殊值)。
'L' 秒中的毫秒,被格式化爲必要時帶前導零的三位數,即 000 - 999。
'N' 秒中的毫微秒,被格式化爲必要時帶前導零的九位數,即 000000000 - 999999999。
'p' 特定於語言環境的 上午或下午 標記以小寫形式表示,例如 "am" 或 "pm"。使用轉換前綴 'T' 可以強行將此輸出轉換爲大寫形式。
'z' 相對於 GMT 的 RFC 822 格式的數字時區偏移量,例如 -0800。
'Z' 表示時區縮寫形式的字符串。Formatter 的語言環境將取代參數的語言環境(假如有)。
's' 自協調世界時 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的秒數,即 Long.MIN_VALUE/1000 與 Long.MAX_VALUE/1000 之間的差值。
'Q' 自協調世界時 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的毫秒數,即 Long.MIN_VALUE 與 Long.MAX_VALUE 之間的差值。


以下轉換字符用來格式化日期:

'B' 特定於語言環境的月份全稱,例如 "January" 和 "February"。
'b' 特定於語言環境的月份簡稱,例如 "Jan" 和 "Feb"。
'h' 與 'b' 相同。
'A' 特定於語言環境的星期幾全稱,例如 "Sunday" 和 "Monday"
'a' 特定於語言環境的星期幾簡稱,例如 "Sun" 和 "Mon"
'C' 除以 100 的四位數表示的年份,被格式化爲必要時帶前導零的兩位數,即 00 - 99
'Y' 年份,被格式化爲必要時帶前導零的四位數(至少),例如,0092 即是格里高利曆的 92 CE。
'y' 年份的最後兩位數,被格式化爲必要時帶前導零的兩位數,即 00 - 99。
'j' 一年中的天數,被格式化爲必要時帶前導零的三位數,例如,對於格里高利曆是 001 - 366。
'm' 月份,被格式化爲必要時帶前導零的兩位數,即 01 - 13。
'd' 一個月中的天數,被格式化爲必要時帶前導零兩位數,即 01 - 31
'e' 一個月中的天數,被格式化爲兩位數,即 1 - 31。


以下轉換字符用於格式化常見的日期/時間組合。

'R' 24 小時制的時間,被格式化爲 "%tH:%tM"
'T' 24 小時制的時間,被格式化爲 "%tH:%tM:%tS"。
'r' 12 小時制的時間,被格式化爲 "%tI:%tM:%tS %Tp"。上午或下午標記 ('%Tp') 的位置可能與語言環境有關。
'D' 日期,被格式化爲 "%tm/%td/%ty"。
'F' ISO 8601 格式的完整日期,被格式化爲 "%tY-%tm-%td"。
'c' 日期和時間,被格式化爲 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969"。


任何未明確定義爲轉換的字符都是非法字符,並且都被保存,以供將來擴展使用。


標誌
下表總結了受支持的標誌。y 表示該標誌受指示參數類型支持。

標誌 常規 字符 整數 浮點 日期/時間 說明
'-' y     y     y     y     y 結果將是左對齊的。
'#' y1     -     y3     y     -     結果應該使用依靠於轉換類型的替換形式
'+' -     -     y4     y     -     結果總是包括一個符號
'   ' -     -     y4     y     -     對於正值,結果中將包括一個前導空格
'0' -     -     y     y     -     結果將用零來填充
',' -     -     y2     y5     -     結果將包括特定於語言環境的組分隔符
'(' -     -     y4     y5     -     結果將是用圓括號括起來的負數


1 取決於 Formattable 的定義。

2 只適用於 'd' 轉換。

3 只適用於 'o'、'x' 和 'X' 轉換。

4 對 BigInteger 應用 'd'、'o'、'x' 和 'X' 轉換時,或者對 byte 及 Byte、short 及 Short、int 及 Integer、long 及 Long 分別應用 'd' 轉換時適用。

5 只適用於 'e'、'E'、'f'、'g' 和 'G' 轉換。

任何未顯式定義爲標誌的字符都是非法字符,並且都被保存,以供擴展使用。

寬度

寬度是將向輸出中寫進的最少字符數。對於行分隔符轉換,不適用寬度,假如提供寬度,則會拋出異常。
精度   對於常規參數類型,精度是將向輸出中寫進的最多字符數。
對於浮點轉換 'e'、'E' 和 'f',精度是小數點分隔符後的位數。假如轉換是 'g' 或 'G',那麼精度是舍進計算後所得數值的所有位數。假如轉換是 'a' 或 'A',則不必指定精度。
對於字符、整數和日期/時間參數類型轉換,以及百分比和行分隔符轉換,精度是不適用的;假如提供精度,則會拋出異常。
參數索引   參數索引是一個十進制整數,用於表明參數在參數列表中的位置。第一個參數由 "1$" 引用,第二個參數由 "2$" 引用,依此類推。
根據位置引用參數的另一種方法是使用 '<' ('\u003c') 標誌,這將會重用以前格式說明符的參數。例如,以下兩條語句產生的字符相同:
Calendar c = ...;
String s1 = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);

String s2 = String.format("Duke's Birthday: %1$tm %<$te,%<$tY", c);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++

java string format 2
在JDK1.5中,String類增加了一個非常有用的靜態函數format(String format, Objece... argues),可以將各類數據格式化爲字符串並輸出。其中format參數指定了輸出的格式,是最複雜也是最難把握的一點,而argues則是一系列等待被格式化的對象。該函數對c語言中printf函數的用法進行了一定的模仿,因此有c語言基礎的人學起來會輕鬆很多。下面我們着重討論一下format 參數的格式及含義。
        format參數中可以包含不需要轉化的字符串,這些字符串是你寫什麼,終極就輸出什麼。同時還包含一些特殊格式的內容,來指定將哪個對象來轉換,以及轉換成什麼形式。這種特殊的格式通通以%index$開頭,index從1開始取值,表示將第index個參數拿進來進行格式化。這一點比c語言要強一點, c語言只能按照參數的順序依次格式化,而java可以選擇第n個參數來格式化。由於該函數可以對任意一個對象進行格式化,不同的對象適用的參數也不同,因此我們下面分類來討論。

1.對整數進行格式化:%[index$][標識][最小寬度]轉換方式
        我們可以看到,格式化字符串由4部分組成,其中%[index$]的含義我們上面已經講過,[最小寬度]的含義也很好理解,就是終極該整數轉化的字符串最少包含多少位數字。我們來看看剩下2個部分的含義吧:


標識:
'-'    在最小寬度內左對齊,不可以與“用0填充”同時使用
'#'    只適用於8進制和16進制,8進制時在結果前面增加一個0,16進制時在結果前面增加0x
'+'    結果總是包括一個符號(一般情況下只適用於10進制,若對象爲BigInteger纔可以用於8進制和16進制)
' '    正值前加空格,負值前加負號(一般情況下只適用於10進制,若對象爲BigInteger纔可以用於8進制和16進制)
'0'    結果將用零來填充
','    只適用於10進制,每3位數字之間用“,”分隔
'('    若參數是負數,則結果中不添加負號而是用圓括號把數字括起來(同‘+’具有同樣的限制)

轉換方式:
d-十進制   o-八進制   x或X-十六進制        上面的說明過於枯燥,我們來看幾個具體的例子。需要特別留意的一點是:大部分標識字符可以同時使用。         System.out.println(String.format("%1$,09d", -3123));
        System.out.println(String.format("%1$9d", -31));
        System.out.println(String.format("%1$-9d", -31));
        System.out.println(String.format("%1$(9d", -31));
        System.out.println(String.format("%1$#9x", 5689));

//結果爲:
//-0003,123
//      -31
//-31     
//     (31)
//   0x1639

2.對浮點數進行格式化:%[index$][標識][最少寬度][.精度]轉換方式
        我們可以看到,浮點數的轉換多了一個“精度”選項,可以控制小數點後面的位數。 標識:
'-'    在最小寬度內左對齊,不可以與“用0填充”同時使用
'+'    結果總是包括一個符號
' '    正值前加空格,負值前加負號
'0'    結果將用零來填充
','    每3位數字之間用“,”分隔(只適用於fgG的轉換)
'('    若參數是負數,則結果中不添加負號而是用圓括號把數字括起來(只適用於eEfgG的轉換)

轉換方式:
'e', 'E' -- 結果被格式化爲用計算機科學記數法表示的十進制數
'f'          -- 結果被格式化爲十進制普通表示方式
'g', 'G'    -- 根據具體情況,自動選擇用普通表示方式還是科學計數法方式
'a', 'A'    --   結果被格式化爲帶有效位數和指數的十六進制浮點數

3.對字符進行格式化:
        對字符進行格式化是非常簡單的,c表示字符,標識中'-'表示左對齊,其他就沒什麼了。

4.對百分比符號進行格式化:
        看了上面的說明,大家會發現百分比符號“%”是特殊格式的一個前綴。那麼我們要輸進一個百分比符號該怎麼辦呢?肯定是需要轉義字符的,但是要留意的是,在這裏轉義字符不是“\”,而是“%”。換句話說,下面這條語句可以輸出一個“12%”:
System.out.println(String.format("%1$d%%", 12));

5.取得平***立的行分隔符:
        System.getProperty("line.separator")可以取得平***立的行分隔符,但是用在format中間未免顯得過於煩瑣了。於是format函數自帶了一個平***立的行分隔符那就是String.format("%n")。

6.對日期類型進行格式化:
         以下日期和時間轉換的後綴字符是爲 't' 和 'T' 轉換定義的。這些類型相似於但不完全等同於那些由 GNU date 和 POSIX strftime(3c) 定義的類型。提供其他轉換類型是爲了訪問特定於 Java 的功能(如將 'L' 用作秒中的毫秒)。

以下轉換字符用來格式化時間:
'H'     24 小時制的小時,被格式化爲必要時帶前導零的兩位數,即 00 - 23。
'I'     12 小時制的小時,被格式化爲必要時帶前導零的兩位數,即 01 - 12。
'k'     24 小時制的小時,即 0 - 23。
'l'     12 小時制的小時,即 1 - 12。
'M'     小時中的分鐘,被格式化爲必要時帶前導零的兩位數,即 00 - 59。
'S'     分鐘中的秒,被格式化爲必要時帶前導零的兩位數,即 00 - 60 ("60" 是支持閏秒所需的一個特殊值)。
'L'     秒中的毫秒,被格式化爲必要時帶前導零的三位數,即 000 - 999。
'N'     秒中的毫微秒,被格式化爲必要時帶前導零的九位數,即 000000000 - 999999999。
'p'     特定於語言環境的上午或下午 標記以小寫形式表示,例如 "am" 或 "pm"。使用轉換前綴 'T' 可以強行將此輸出轉換爲大寫形式。
'z'     相對於 GMT 的 RFC 822 格式的數字時區偏移量,例如 -0800。
'Z'     表示時區縮寫形式的字符串。Formatter 的語言環境將取代參數的語言環境(假如有)。
's'     自協調世界時 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的秒數,即 Long.MIN_VALUE/1000 與 Long.MAX_VALUE/1000 之間的差值。
'Q'     自協調世界時 (UTC) 1970 年 1 月 1 日 00:00:00 至現在所經過的毫秒數,即 Long.MIN_VALUE 與 Long.MAX_VALUE 之間的差值。

以下轉換字符用來格式化日期:
'B'     特定於語言環境的月份全稱,例如 "January" 和 "February"。
'b'     特定於語言環境的月份簡稱,例如 "Jan" 和 "Feb"。
'h'     與 'b' 相同。
'A'     特定於語言環境的星期幾全稱,例如 "Sunday" 和 "Monday"
'a'     特定於語言環境的星期幾簡稱,例如 "Sun" 和 "Mon"
'C'     除以 100 的四位數表示的年份,被格式化爲必要時帶前導零的兩位數,即 00 - 99
'Y'     年份,被格式化爲必要時帶前導零的四位數(至少),例如,0092 即是格里高利曆的 92 CE。
'y'     年份的最後兩位數,被格式化爲必要時帶前導零的兩位數,即 00 - 99。
'j'     一年中的天數,被格式化爲必要時帶前導零的三位數,例如,對於格里高利曆是 001 - 366。
'm'     月份,被格式化爲必要時帶前導零的兩位數,即 01 - 13。
'd'     一個月中的天數,被格式化爲必要時帶前導零兩位數,即 01 - 31
'e'     一個月中的天數,被格式化爲兩位數,即 1 - 31。

以下轉換字符用於格式化常見的日期/時間組合。
'R'     24 小時制的時間,被格式化爲 "%tH:%tM"
'T'     24 小時制的時間,被格式化爲 "%tH:%tM:%tS"。
'r'     12 小時制的時間,被格式化爲 "%tI:%tM:%tS %Tp"。上午或下午標記 ('%Tp') 的位置可能與語言環境有關。
'D'     日期,被格式化爲 "%tm/%td/%ty"。
'F'     ISO 8601 格式的完整日期,被格式化爲 "%tY-%tm-%td"。
'c'     日期和時間,被格式化爲 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969"。
+++++++++++++++++++++++++++++++++++++++++
轉貼自 http://hi.baidu.com/jg_%B3%C2/blog/item/00097df746362f27720eecf1.html

首先看它的聲明:
function Format(const Format: string; const Args: array of const): string; overload;
事實上Format方法有兩個種形式,另外一種是三個參數的,主要區別在於它是線程安全的,
但並未幾用,所以這裏只對第一個先容:

function Format(const Format: string; const Args: array of const): string; overload;
Format參數是一個格式字符串,用於格式化Args裏面的值的。Args又是什麼呢,
它是一個變體數組,即它裏面可以有多個參數,而且每個參數可以不同。
如以下例子:
Format(’my name is %6s’,[’wind’]);
返回後就是
my name is wind

現在來看Format參數的具體情況:
Format裏面可以寫普通的字符串,比如’my name is’
但有些格式指令字符具有特殊意義,比如"%6s"

格式指令具有以下的形式:
"%" [index ":"] ["-"] [width] ["." prec] type
它是以"%"開始,而以type結束,type表示一個具體的類型。中間是用來
格式化type類型的指令字符,是可選的。

先來看看type,type可以是以下字符:
d 十制數,表示一個整型值
u 和d一樣是整型值,但它是無符號的,而假如它對應的值是負的,則返回時
是一個2的32次方減往這個盡對值的數
如:Format(’this is %u’,[-2]);
返回的是:this is 4294967294
f 對應浮點數
e 科學表示法,對應整型數和浮點數,
比如Format(’this is %e’,[-2.22]);
返回的是:this is -2.22000000000000E+000
等一下再說明假如將數的精度縮小
g 這個只能對應浮點型,且它會將值中多餘的數往掉
比如Format(’this is %g’,[02.200]);
返回的是:this is 2.2
n 只能對應浮點型,將值轉化爲號碼的形式。看一個例子就明白了
Format(’this is %n’,[4552.2176]);
返回的是this is 4,552.22
留意有兩點,一是隻表示到小數後兩位,等一下說怎麼消除這種情況
二是,即使小數沒有被截斷,它也不會也像整數部分一樣有逗號來分開的
m 錢幣類型,但關於貨幣類型有更好的格式化方法,這裏只是簡單的格式化
另外它只對應於浮點值
Format(’this is %m’,[9552.21]);
返回:this is ¥9,552.21
p 對應於指針類型,返回的值是指針的地址,以十六進制的形式來表示
例如:
var X:integer;
p:^integer;
begin
X:=99;
p:=@X;
Edit1.Text:=Format(’this is %p’,[p]);
end;
Edit1的內容是:this is 0012F548
s 對應字符串類型,不用多說了吧
x 必須是一個整形值,以十六進制的形式返回
Edit1.Text:=Format(’this is %X’,[15]);
返回是:this is F

類型講述完畢,下面先容格式化Type的指令:
[index ":"] 這個要怎麼表達呢,看一個例子
Format(’this is %d %d’,[12,13]);
其中第一個%d的索引是0,第二個%d是1,所以字符顯示的時候
是這樣 this is 12 13

而假如你這樣定義:
Format(’this is %1:d %0:d’,[12,13]);
那麼返回的字符串就變成了
this is 13 12
現在明白了嗎,[index ":"] 中的index指示Args中參數顯示的
順序

還有一種情況,假如這樣Format(’%d %d %d %0:d %d’, [1, 2, 3, 4])
將返回1 2 3 1 2。
假如你想返回的是1 2 3 1 4,必須這樣定:
Format(’%d %d %d %0:d %3:d’, [1, 2, 3, 4])
但用的時候要留意,索引不能超出Args中的個數,不然會引起異常
如Format(’this is %2:d %0:d’,[12,13]);
由於Args中只有12 13 兩個數,所以Index只能是0或1,這裏爲2就錯了
[width] 指定將被格式化的值佔的寬度,看一個例子就明白了
Format(’this is %4d’,[12]);
輸出是:this is 12
這個是比較輕易,不過假如Width的值小於參數的長度,則沒有效果。
如:Format(’this is %1d’,[12]);
輸出是:this is 12
["-"] 這個指定參數向左齊,和[width]合在一起最可以看到效果:
Format(’this is %-4d,yes’,[12]);
輸出是:this is 12 ,yes

["." prec] 指定精度,對於浮點數效果最佳:
Format(’this is %.2f’,[’1.1234]);
輸出 this is 1.12
Format(’this is %.7f’,[’1.1234]);
輸了 this is 1.1234000

而對於整型數,假如prec比如整型的位數小,則沒有效果
反之比整形值的位數大,則會在整型值的前面以0補之
Format(’this is %.7d’,[1234]);
輸出是:this is 0001234]

對於字符型,恰好和整型值相反,假如prec比字符串型的長度大
則沒有效果,反之比字符串型的長度小,則會截斷尾部的字符
Format(’this is %.2s’,[’1234’]);
輸出是 this is 12

而上面說的這個例子:
Format(’this is %e’,[-2.22]);
返回的是:this is -2.22000000000000E+000
怎麼往掉多餘的0呢,這個就行啦
Format(’this is %.2e’,[-2.22]);

好了,第一個總算講完了,應該對他的應用很熟悉了吧

///////////////////////////////////////////////////////////////
二 FormatDateTime的用法
他的聲明爲:
function FormatDateTime(const Format: string; DateTime: TDateTime): string;
overload;
當然和Format一樣還有一種,但這裏只先容常用的第一種
Format參數是一個格式化字符串。DateTime是時間類型。返回值是一種格式化後的
字符串

重點來看Format參數中的指令字符
c 以短時間格式顯示時間,即全部是數字的表示
FormatdateTime(’c’,now);
輸出爲:2004-8-7 9:55:40
d 對應於時間中的日期,日期是一位則顯示一位,兩位則顯示兩位
FormatdateTime(’d’,now);
輸出可能爲1~31
dd 和d的意義一樣,但它始終是以兩位來顯示的
FormatdateTime(’dd’,now);
輸出可能爲01~31
ddd 顯示的是星期幾
FormatdateTime(’ddd’,now);
輸出爲: 星期六
dddd 和ddd顯示的是一樣的。
但上面兩個假如在其他國家可能不一樣。
ddddd 以短時間格式顯示年月日
FormatdateTime(’ddddd’,now);
輸出爲:2004-8-7
dddddd 以長時間格式顯示年月日
FormatdateTime(’dddddd’,now);
輸出爲:2004年8月7日
e/ee/eee/eeee 以相應的位數顯示年
FormatdateTime(’ee’,now);
輸出爲:04 (表示04年)
m/mm/mmm/mmmm 表示月
FormatdateTime(’m’,now);
輸出爲:8
FormatdateTime(’mm’,now);
輸出爲 08
FormatdateTime(’mmm’,now);
輸出爲 八月
FormatdateTime(’mmmm’,now);
輸出爲 八月
和ddd/dddd 一樣,在其他國家可能不同
yy/yyyy 表示年
FormatdateTime(’yy’,now);
輸出爲 04
FormatdateTime(’yyyy’,now);
輸出爲 2004
h/hh,n/nn,s/ss,z/zzz 分別表示小時,分,秒,毫秒
t 以短時間格式顯示時間
FormatdateTime(’t’,now);
輸出爲 10:17
tt 以長時間格式顯示時間
FormatdateTime(’tt’,now);
輸出爲10:18:46
ampm 以長時間格式顯示上午還是下午
FormatdateTime(’ttampm’,now);
輸出爲:10:22:57上午

大概如此,假如要在Format中加普通的字符串,可以用雙引號隔開那些
特定義的字符,這樣普通字符串中假如含特殊的字符就不會被顯示爲
時間格式啦:
FormatdateTime(’"today is" c’,now);
輸出爲:today is 2004-8-7 10:26:58
時間中也可以加"-"或"\"來分開日期:
FormatdateTime(’"today is" yy-mm-dd’,now);
FormatdateTime(’"today is" yy\mm\dd’,now);
輸出爲: today is 04-08-07
也可以用":"來分開時間
FormatdateTime(’"today is" hh:nn:ss’,now);
輸出爲:today is 10:32:23

/////////////////////////////////////////////////////////////////
三.FormatFloat的用法

常用的聲明:
function FormatFloat(const Format: string; value: Extended): string; overload;
和上面一樣Format參數爲格式化指令字符,value爲Extended類型
爲什麼是這個類型,由於它是所有浮點值中表示範圍最大的,假如傳進該方法的參數
比如Double或者其他,則可以保存不會超出範圍。

關鍵是看Format參數的用法
0 這個指定相應的位數的指令。
比如:FormatFloat(’000.000’,22.22);
輸出的就是022.220
留意一點,假如整數部分的0的個數小於value參數中整數的位數,則沒有效果
如:FormatFloat(’0.00’,22.22);
輸出的是:22.22
但假如小數部分的0小於value中小數的倍數,則會截往相應的小數和位數
如:FormatFloat(’0.0’,22.22);
輸出的是:22.2

也可以在整數0中指定逗號,這個整數位數必須大於3個,纔會有逗號出句
FormatFloat(’0,000.0’,2222.22);
輸出是:2,222.2
假如這樣FormatFloat(’000,0.0’,2222.22);
它的輸出還是:2,222.2
留意它的規律

# 和0的用法一樣,目前我還沒有測出有什麼不同。
FormatFloat(’##.##’,22.22);
輸出是:22.00

E 科學表示法,看幾個例子大概就明白了
FormatFloat(’0.00E+00’,2222.22);
輸出是 2.22E+03
FormatFloat(’0000.00E+00’,2222.22);
輸出是 2222.22E+00
FormatFloat(’00.0E+0’,2222.22);
22.2E+2

Format函數 返回

返回 Variant (String),其中含有一個表達式,它是根據格式表達式中的指令來格式化的。

語法

Format(expression[, format[, firstdayofweek[, firstweekofyear]]])

Format 函數的語法具有下面幾個部分:

部分 說明
expression 必要參數。任何有效的表達式。
format 可選參數。有效的命名表達式或用戶自定義格式表達式。
firstdayofweek 可選參數。常數,表示一星期的第一天。
firstweekofyear 可選參數。常數,表示一年的第一週。

Format函數可按預定的格式顯示或打印一個Date變量。如:
Print Format(d, “general date”) `99-5-23 11:45:34
Print Format(d, “long date”) `1999年5月23日
Print Format(d, “medium date”) `99-05-23
Print Format(d, “short date”) `99-5-23
Print Format(d, “long time”) `11:45:34
Print Format(d, “medium time”) `11:45 AM
Print Format(d,“short time”) `11:45
Format函數也答應你自己規定顯示格式。


++++++++++++++++++++++++++++++++++++++++
轉貼自 http://blog.csdn.net/maiyude/archive/2009/01/17/3818636.aspx

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication6
{
    class Program
    {
        //定義枚舉類型
        enum Color { Yellow = 1, Blue, Green };
        //定義日期類型並獲取當前的日期
        static DateTime thisDate = DateTime.Now;
        static void Main(string[] args)
        {
            // 聲明字符串
            string s = "";
            Console.Clear();

        // 格式化各種數字
            Console.WriteLine("Standard Numeric Format Specifiers");
            s = String.Format(
                "(C) Currency: . . . . . . . . {0:C}\n" +
                "(D) Decimal:. . . . . . . . . {0:D}\n" +
                "(E) Scientific: . . . . . . . {1:E}\n" +
                "(F) Fixed point:. . . . . . . {1:F}\n" +
                "(G) General:. . . . . . . . . {0:G}\n" +
                "    (default):. . . . . . . . {0} (default = 'G')\n" +
                "(N) Number: . . . . . . . . . {0:N}\n" +
                "(P) Percent:. . . . . . . . . {1:P}\n" +
                "(R) Round-trip: . . . . . . . {1:R}\n" +
                "(X) Hexadecimal:. . . . . . . {0:X}\n",
                -123, -123.45f);
            Console.WriteLine(s);

        //格式化日期.
            Console.WriteLine("Standard DateTime Format Specifiers");
            s = String.Format(
                "(d) Short date: . . . . . . . {0:d}\n" +
                "(D) Long date:. . . . . . . . {0:D}\n" +
                "(t) Short time: . . . . . . . {0:t}\n" +
                "(T) Long time:. . . . . . . . {0:T}\n" +
                "(f) Full date/short time: . . {0:f}\n" +
                "(F) Full date/long time:. . . {0:F}\n" +
                "(g) General date/short time:. {0:g}\n" +
                "(G) General date/long time: . {0:G}\n" +
                "    (default):. . . . . . . . {0} (default = 'G')\n" +
                "(M) Month:. . . . . . . . . . {0:M}\n" +
                "(R) RFC1123:. . . . . . . . . {0:R}\n" +
                "(s) Sortable: . . . . . . . . {0:s}\n" +
                "(u) Universal sortable: . . . {0:u} (invariant)\n" +
                "(U) Universal sortable: . . . {0:U}\n" +
                "(Y) Year: . . . . . . . . . . {0:Y}\n",
                thisDate);
            Console.WriteLine(s);

        // 格式化枚舉類型
            Console.WriteLine("Standard Enumeration Format Specifiers");
            s = String.Format(
                "(G) General:. . . . . . . . . {2:G}\n" +
                "    (default):. . . . . . . . {0} (default = 'G')\n" +
                "(F) Flags:. . . . . . . . . . {2:F} (flags or integer)\n" +
                "(D) Decimal number: . . . . . {0:D}\n" +
                "(X) Hexadecimal:. . . . . . . {1:X}\n",
                Color.Green,Color.Yellow,2);      
            Console.WriteLine(s);
            Console.ReadLine();

        }
    }
}
發佈了44 篇原創文章 · 獲贊 14 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章