格式化概觀

ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1028/cpguide/html/cpconformattingoverview.htm

標準數值格式字串會用來格式化一般數值型別。標準格式字串採用 Axx 的型式,其中 A 是稱為格式規範的單一字母順序字元,而 xx 是稱為精確度規範的選擇性整數。格式規範必須是內建格式字元的其中之一。精確度規範的範圍從 0 到 99,並且控制著小數點右邊有效位數或零的數目。格式字串不可以包含泛空白字元。
如果格式字串沒有包含其中一個標準格式規範,即會發生 FormatException。例如,格式字串 "z" 會解譯為標準數值格式字串,因為它包含一個字母字元,但這個字串不是一個標準數值格式規範,所以會產生 FormatException。任何不符合標準數值格式字串的定義的數值格式字串將解譯為自訂數值格式字串。格式字串 "c!" 會解譯為自訂格式字串,因為它包含兩個字母字元,即使字元 "c" 是標準數值格式規範。
下列表格描述標準數值格式字串。注意,這些格式規範產生的結果字串受 [地區選項] 控制台中的設定值影響。使用不同設定的電腦將會產生不同的結果字串。
格式規範名稱說明
C 或 c貨幣數值將轉換為表示貨幣數量的字串。轉換由用以格式化數值的 NumberFormatInfo 物件的貨幣格式資訊來控制。精確度規範指示所需要的小數位數。如果省略精確度規範,則會使用 NumberFormatInfo 指定的預設貨幣精確度。
D 或 d十進位這個格式只針對整數型別來支援。數值將轉換為十進位數 (0-9) 的字串,並在前面加上負號,如果數值為負數的話。精確度規範指示產生的字串中所需要的最少位數。如果有必要,數值以零填補其左邊,產生精確度規範所指定的位數。
E 或 e科學 (指數的)數字會轉換為「-d.ddd...E+ddd」或「-d.ddd...e+ddd」型式的字串,其中「d」表示數字 (0-9)。字串以負號開始,如果數值為負數的話。在小數點前面永遠會有一個位數。精確度規範指示小數點之後需要的位數。如果省略精確度規範,則使用小數點之後有六位數的預設值。格式規範的大小寫指示是否在指數之前加上 'E' 或 'e'。指數永遠由正號或負號和最少三位數所組成。指數將以零填補來符合這個最少位數,若有必要的話。
F 或 f固定點數字會轉換為「-ddd.ddd...」型式的字串,其中「d」表示數字 (0-9)。字串以負號開始,如果數值為負數的話。精確度規範指示所需要的小數位數。如果省略精確度規範,則使用 NumberFormatInfo 指定的預設數值精確度。
G 或 g一般數字會轉換為固定點或科學標記法中最精簡的一個,端視數字的型別和精確度規範是否存在而定。如果精確度規範已省略或為零,數字的型別將決定預設的精確度,如下列清單所顯示的。
Byte 或 SByte:3
Int16 或 UInt16:5
Int32 或 UInt32:10
Int64 或 UInt64:19
Single:7
Double:15
Decimal:29
如果以科學標記法來表示數字所產生的指數大於 -5 而且小於精確度規範,則會使用固定點標記法;否則使用科學標記法。如有必要,結果會包含小數點,而且後端的零會省略。如果精確度規範存在而且結果中的有效位數超過指定的精確度,那麼超出的後端位數會藉由四捨五入來移除。要是使用科學標記法,如果格式規範為 'G',結果中的指數前面會加上 'E';如果格式規範為 'g',則加上 'e'。
前面規則的例外是如果數字為 Decimal 而精確度規範已省略的情形。在該情形下,永遠使用固定點標記法並且保留後端的零。
N 或 n編號數字會轉換為「-d,ddd,ddd.ddd...」型式的字串,其中「d」表示數字 (0-9)。字串以負號開始,如果數值為負數的話。千位分隔符號在小數點左邊插入每三位數一組的各個群組之間。精確度規範指示所需要的小數位數。如果省略精確度規範,則使用 NumberFormatInfo 指定的預設數值精確度。
P 或 p百分比數值將轉換為表示百分比的字串,如 NumberFormatInfo.PercentNegativePattern 屬性或 NumberFormatInfo.PercentPositivePattern 屬性所定義的。如果數值為負數,產生的字串由 PercentNegativePattern 來定義,並以負號開始。轉換的數值要乘以 100,以便呈現為百分比。精確度規範指示所需要的小數位數。如果省略精確度規範,則使用 NumberFormatInfo 指定的預設數值精確度。
R 或 r往返來回規範保證轉換為字串的數值將會被剖析還原成相同數值。當數值使用這個規範來格式化時,它首先使用一般格式 (具有 15 位精確度的 Double 和 7 位精確度的 Single) 來測試。如果該值成功地剖析回到相同數值,即會使用一般格式規範來格式化。然而,如果這值未成功地剖析回到相同數值,那麼這值使用 17 位數精確度的 Double 和 9 位數精確度的 Single 來格式化。雖然精確度規範可以附加到來回格式規範,但它會被忽略。使用來回規範時,這個規範優先於精確度規範。這個格式只受浮點型別支援。
X 或 x十六進位數值將轉換為十六進位數字的字串。格式規範的大小寫指示是否要使用大寫或小寫字元於大於 9 的十六進位數字。例如,使用 'X' 產生 "ABCDEF",而 'x' 產生 "abcdef"。精確度規範指示產生的字串中所需要的最少位數。如果有必要,數值以零填補其左邊,產生精確度規範所指定的位數。這個格式只針對整數型別來支援。

下列範例說明如何使用標準數值格式規範來格式化數值基底型別。
[Visual Basic]
Imports System
Imports System.Globalization
Imports System.Threading

Module Module1
    Sub Main()

        Thread.CurrentThread.CurrentCulture = New CultureInfo("en-us")
        Dim MyDouble As Double = 123456789

        Console.WriteLine("The examples in en-US culture:")
        Console.WriteLine(MyDouble.ToString("C"))
        Console.WriteLine(MyDouble.ToString("E"))
        Console.WriteLine(MyDouble.ToString("P"))
        Console.WriteLine(MyDouble.ToString("N"))
        Console.WriteLine(MyDouble.ToString("F"))

        Thread.CurrentThread.CurrentCulture = New CultureInfo("de-DE")
        Console.WriteLine("The examples in de-DE culture:")
        Console.WriteLine(MyDouble.ToString("C"))
        Console.WriteLine(MyDouble.ToString("E"))
        Console.WriteLine(MyDouble.ToString("P"))
        Console.WriteLine(MyDouble.ToString("N"))
        Console.WriteLine(MyDouble.ToString("F"))
    End Sub
End Module
[C#]
using System;
using System.Threading;
using System.Globalization;

class Class1
{
    static void Main()
    {
        Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");
            double MyDouble = 123456789;
       
        Console.WriteLine("The examples in en-US culture.\n");
        Console.WriteLine(MyDouble.ToString("C"));
        Console.WriteLine(MyDouble.ToString("E"));
        Console.WriteLine(MyDouble.ToString("P"));
        Console.WriteLine(MyDouble.ToString("N"));
        Console.WriteLine(MyDouble.ToString("F"));

        Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
        Console.WriteLine("The examples in de-DE culture.\n");
        Console.WriteLine(MyDouble.ToString("C"));
        Console.WriteLine(MyDouble.ToString("E"));
        Console.WriteLine(MyDouble.ToString("P"));
        Console.WriteLine(MyDouble.ToString("N"));
        Console.WriteLine(MyDouble.ToString("F"));
    }
}
前面的程式碼範例在主控台顯示如下。
The examples in en-US culture:
$123,456,789.00
1.234568E+008
12,345,678,900.00%
123,456,789.00
123456789.00
The examples in de-DE culture:
123.456.789,00 DM
1,234568E+008
12,345,678,900.00%
123.456.789,00
123456789,00

標準 DateTime 格式字串由下列表格中的單一格式規範字元組成。如果格式規範無法在下面表格中找到,即會發生 Runtime 例外狀況。如果格式字串比單一字元長 (即使額外字元為泛空白字元),格式字串會解譯為自訂格式字串。
注意,這些格式規範產生的結果字串受 [地區選項] 控制台中的設定值影響。使用不同文化特性或不同日期和時間設定的電腦將會產生不同的結果字串。
格式字串顯示的日期和時間分隔符號由與目前文化特性的 DateTimeFormat 屬性相關的 DateSeparator 和 TimeSeparator 字元來定義。然而,在 InvariantCulture 為 'r'、's' 和 'u' 規範所參考的情形中,與 DateSeparator 和 TimeSeparator 字元相關的字元不會根據目前文化特性來變更。
下列表格描述用以格式化 DateTime 物件的標準格式規範。
格式規範名稱說明
d簡短日期模式顯示與目前執行緒相關聯的 DateTimeFormatInfo.ShortDatePattern 屬性或指定的格式提供者所定義的模式。
D完整日期模式顯示與目前執行緒相關聯的 DateTimeFormatInfo.LongDatePattern 屬性或指定的格式提供者所定義的模式。
t簡短時間模式顯示與目前執行緒相關聯的 DateTimeFormatInfo.ShortTimePattern 屬性或指定的格式提供者所定義的模式。
T完整時間模式顯示與目前執行緒相關聯的 DateTimeFormatInfo.LongTimePattern 屬性或指定的格式提供者所定義的模式。
f完整可排序日期/時間模式 (簡短時間)顯示完整日期和簡短時間模式的組合,其間以空格來分隔。
F完整可排序日期/時間模式 (完整時間)顯示與目前執行緒相關的 DateTimeFormatInfo.FullDateTimePattern 屬性或指定的格式提供者所定義的模式。
g一般可排序日期/時間模式 (簡短時間)顯示簡短日期和簡短時間模式的組合,其間以空格來分隔。
G一般可排序日期/時間模式 (完整時間)顯示簡短日期和完整時間模式的組合,其間以空格來分隔。
M 或 m月日模式顯示與目前執行緒相關聯的 DateTimeFormatInfo.MonthDayPattern 屬性或指定的格式提供者所定義的模式。
R 或 rRFC1123 模式顯示與目前執行緒相關聯的 DateTimeFormatInfo.RFC1123Pattern 屬性或指定的格式提供者所定義的模式。這是已定義的標準而且屬性為唯讀;因此,它永遠一樣,無論使用的文化特性或提供的格式提供者為何。屬性參考 CultureInfo.InvariantCulture 屬性,並遵照自訂模式 'ddd, dd MMMM yyyy HH:mm:ss G\MT'。注意,'GMT' 中的 'M' 需要逸出字元,好讓它不被解譯。格式化不會修改 DateTime 的值;因此,您在格式化之前必須將值調整為 GMT。
s可排序日期/時間模式;符合 ISO 8601顯示與目前執行緒相關聯的 DateTimeFormatInfo.SortableDateTimePattern 屬性或指定的格式提供者所定義的模式。屬性參考 CultureInfo.InvariantCulture 屬性,而格式則遵照自訂模式 'yyyy-MM-ddTHH:mm:ss'。
u通用可排序日期/時間模式顯示與目前執行緒相關聯的 DateTimeFormatInfo.UniversalSortableDateTimePattern 屬性或指定的格式提供者所定義的模式。因為它是已定義的標準而且屬性為唯讀,模式永遠一樣,無論文化特性或格式提供者為何。格式遵照自訂模式 "yyyy-MM-dd HH:mm:ssZ"。在格式化日期和時間時,不會進行任何時區轉換;因此,在使用這個格式規範之前要將當地日期和時間轉換為通用時間。
U通用可排序日期/時間模式顯示與目前執行緒相關的 DateTimeFormatInfo.FullDateTimePattern 屬性或指定的格式提供者所定義的模式。注意,顯示的時間針對通用的模式,而非當地時間。
Y 或 y年月模式顯示與目前執行緒相關聯的 DateTimeFormatInfo.YearMonthPattern 屬性或指定的格式提供者所定義的模式。
任何其他單一字元未知的規範  

下列範例說明如何將標準格式字串使用於 DateTime 物件。
[Visual Basic]
Dim dt As DateTime = DateTime.Now
Dim dfi As DateTimeFormatInfo = New DateTimeFormatInfo()
Dim ci As CultureInfo = New CultureInfo("de-DE")

' Make up a new custom DateTime pattern, for demonstration.
dfi.MonthDayPattern = "MM-MMMM, ddd-dddd"

' Use the DateTimeFormat from the culture associated
' with the current thread.

Console.WriteLine( dt.ToString("d") ) 
Console.WriteLine( dt.ToString("m") )

' Use the DateTimeFormat from the specific culture passed.
Console.WriteLine( dt.ToString("d", ci ) )

' Use the settings from the DateTimeFormatInfo object passed.
Console.WriteLine( dt.ToString("m", dfi ) )

' Reset the current thread to a different culture.
Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-BE")
Console.WriteLine( dt.ToString("d") )
[C#]
DateTime dt = DateTime.Now;
DateTimeFormatInfo dfi = new DateTimeFormatInfo();
CultureInfo ci = new CultureInfo("de-DE");

// Make up a new custom DateTime pattern, for demonstration.
dfi.MonthDayPattern = "MM-MMMM, ddd-dddd";

// Use the DateTimeFormat from the culture associated
// with the current thread.
Console.WriteLine( dt.ToString("d") ); 
Console.WriteLine( dt.ToString("m") );

// Use the DateTimeFormat from the specific culture passed.
Console.WriteLine( dt.ToString("d", ci ) );

// Use the settings from the DateTimeFormatInfo object passed.
Console.WriteLine( dt.ToString("m", dfi ) );

// Reset the current thread to a different culture.
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-BE");
Console.WriteLine( dt.ToString("d") );

posted on 2005-02-13 15:40  明月伴我行  阅读(1060)  评论(0编辑  收藏  举报

导航