日期和時間格式字串會定義對 DateTime DateTimeOffset 值執行格式化作業後所產生的文字表示。 另外還會定義剖析作業所需日期和時間值的表示,以便成功地將字串轉換成日期和時間。 自訂格式字串是由一個或多個自訂日期和時間格式規範所組成。 任何不是 標準日期和時間格式字串 的字串都會被解譯為自訂日期和時間格式字串。

您可以下載 Format Utility ,這是 .NET 核心Windows Forms應用程式,可讓您將格式字串套用至數值或日期和時間值,並顯示結果字串。 提供 C# Visual Basic 的原始程式碼。

自訂日期和時間格式字串可以與 DateTime DateTimeOffset 值搭配使用。

本文中的一些 C# 範例會在試用內嵌程式碼執行器和遊樂場中 執行 .NET 。 選取 [執行] 按鈕以在互動式視窗中執行範例。 執行程式碼之後,您便可以修改它,並再選取一次 [執行] 來執行修改過的程式碼。 修改過的程式碼會在互動式視窗中執行,或是如果編譯失敗的話,互動式視窗會顯示所有 C# 編譯器錯誤訊息。

Try .NET 內嵌程式碼執行器和遊樂場的 當地時區 是國際標準時間或 UTC。 這可能會影響示範 DateTime DateTimeOffset TimeZoneInfo 型別與其成員之範例的行為與輸出。

在格式化作業中,自訂日期和時間格式字串可以搭配日期和時間執行個體的 ToString 方法或是支援複合格式的方法使用。 以下範例說明這兩種用法。

DateTime thisDate1 = new DateTime(2011, 6, 10);
Console.WriteLine("Today is " + thisDate1.ToString("MMMM dd, yyyy") + ".");
DateTimeOffset thisDate2 = new DateTimeOffset(2011, 6, 10, 15, 24, 16,
                                              TimeSpan.Zero);
Console.WriteLine("The current date and time: {0:MM/dd/yy H:mm:ss zzz}",
                   thisDate2);
// The example displays the following output:
//    Today is June 10, 2011.
//    The current date and time: 06/10/11 15:24:16 +00:00
Dim thisDate1 As Date = #6/10/2011#
Console.WriteLine("Today is " + thisDate1.ToString("MMMM dd, yyyy") + ".")
Dim thisDate2 As New DateTimeOffset(2011, 6, 10, 15, 24, 16, TimeSpan.Zero)
Console.WriteLine("The current date and time: {0:MM/dd/yy H:mm:ss zzz}",
                  thisDate2)
' The example displays the following output:
'    Today is June 10, 2011.
'    The current date and time: 06/10/11 15:24:16 +00:00

在剖析作業中,自訂日期和時間格式字串可以搭配 DateTime.ParseExactDateTime.TryParseExactDateTimeOffset.ParseExactDateTimeOffset.TryParseExact 方法使用。 這些方法需要輸入字串完全符合特定模式,剖析作業才會成功。 下列範例說明呼叫 DateTimeOffset.ParseExact(String, String, IFormatProvider) 方法來剖析必須包含日、月和兩位數年的日期。

using System;
using System.Globalization;
public class Example1
    public static void Main()
        string[] dateValues = { "30-12-2011", "12-30-2011",
                              "30-12-11", "12-30-11" };
        string pattern = "MM-dd-yy";
        DateTime parsedDate;
        foreach (var dateValue in dateValues)
            if (DateTime.TryParseExact(dateValue, pattern, null,
                                      DateTimeStyles.None, out parsedDate))
                Console.WriteLine("Converted '{0}' to {1:d}.",
                                  dateValue, parsedDate);
                Console.WriteLine("Unable to convert '{0}' to a date and time.",
                                  dateValue);
// The example displays the following output:
//    Unable to convert '30-12-2011' to a date and time.
//    Unable to convert '12-30-2011' to a date and time.
//    Unable to convert '30-12-11' to a date and time.
//    Converted '12-30-11' to 12/30/2011.
Imports System.Globalization
Module Example
    Public Sub Main()
        Dim dateValues() As String = {"30-12-2011", "12-30-2011",
                                        "30-12-11", "12-30-11"}
        Dim pattern As String = "MM-dd-yy"
        Dim parsedDate As Date
        For Each dateValue As String In dateValues
            If DateTime.TryParseExact(dateValue, pattern, Nothing,
                                      DateTimeStyles.None, parsedDate) Then
                Console.WriteLine("Converted '{0}' to {1:d}.",
                                  dateValue, parsedDate)
                Console.WriteLine("Unable to convert '{0}' to a date and time.",
                                  dateValue)
            End If
    End Sub
End Module
' The example displays the following output:
'    Unable to convert '30-12-2011' to a date and time.
'    Unable to convert '12-30-2011' to a date and time.
'    Unable to convert '30-12-11' to a date and time.
'    Converted '12-30-11' to 12/30/2011.

下表描述自訂日期和時間格式規範,並顯示每個格式規範所產生的結果字串。 根據預設,結果字串會反映 en-US 文化特性的格式設定慣例。 如果特定格式規範會產生當地語系化的結果字串,則範例也會註明結果字串適用的文化特性。 如需使用自訂日期和時間格式字串的詳細資訊,請參閱注意一節。

"ddd" 星期幾的縮寫名稱。

詳細資訊:"ddd" 自訂格式規範。 2009-06-15T13:45:30 - > Mon (en-US)

2009-06-15T13:45:30 - > Пн (ru-RU)

2009-06-15T13:45:30 - > lun。 (fr-FR) "dddd" 星期幾的完整名稱。

詳細資訊:"dddd" 自訂格式規範。 2009-06-15T13:45:30 - > 星期一 (en-US)

2009-06-15T13:45:30 - > понедельник (ru-RU)

2009-06-15T13:45:30 - > lundi (fr-FR) 日期和時間值中的十分之一秒。

詳細資訊:"f" 自訂格式規範。 2009-06-15T13:45:30.6170000 - > 6

2009-06-15T13:45:30.05 - > 0 日期和時間值中的百分之一秒。

詳細資訊: 「ff」 自訂格式規範。 2009-06-15T13:45:30.6170000 - > 61

2009-06-15T13:45:30.0050000 - > 00 "fff" 日期和時間值中的千分之一秒。

詳細資訊:"fff" 自訂格式規範。 6/15/2009 13:45:30.617 - > 617

6/15/2009 13:45:30.0005 - > 000 "ffff" 日期和時間值中的萬分之一秒。

詳細資訊: 「ffff」 自訂格式規範。 2009-06-15T13:45:30.6175000 - > 6175

2009-06-15T13:45:30.0000500 - > 0000 "fffff" 日期和時間值中的十萬分之一秒。

詳細資訊:"fffff" 自訂格式規範。 2009-06-15T13:45:30.6175400 - > 61754

6/15/2009 13:45:30.000005 - > 00000 "ffffff" 日期和時間值中的百萬分之一秒。

詳細資訊: 「ffffff」 自訂格式規範。 2009-06-15T13:45:30.6175420 - > 617542

2009-06-15T13:45:30.0000005 - > 000000 "fffffff" 日期和時間值中的千萬分之一秒。

詳細資訊: 「fffffff」 自訂格式規範。 2009-06-15T13:45:30.6175425 - > 6175425

2009-06-15T13:45:30.0001150 - > 0001150 如果不是零,則為日期和時間值中的十分之一秒。

詳細資訊: 「F」 自訂格式規範。 2009-06-15T13:45:30.6170000 - > 6

2009-06-15T13:45:30.0500000 - > (沒有輸出) 如果不是零,則為日期和時間值中的百分之一秒。

詳細資訊:"FF" 自訂格式規範。 2009-06-15T13:45:30.6170000 - > 61

2009-06-15T13:45:30.0050000 - > (沒有輸出) "FFF" 如果不是零,則為日期和時間值中的千分之一秒。

詳細資訊: 「FFF」 自訂格式規範。 2009-06-15T13:45:30.6170000 - > 617

2009-06-15T13:45:30.0005000 - > (沒有輸出) "FFFF" 如果不是零,則為日期和時間值中的萬分之一秒。

詳細資訊:"FFFF" 自訂格式規範。 2009-06-15T13:45:30.5275000 - > 5275

2009-06-15T13:45:30.0000500 - > (沒有輸出) "FFFFF" 如果不是零,則為日期和時間值中的十萬分之一秒。

詳細資訊: 「FFFFF」 自訂格式規範。 2009-06-15T13:45:30.6175400 - > 61754

2009-06-15T13:45:30.0000050 - > (沒有輸出) "FFFFFF" 如果不是零,則為日期和時間值中的百萬分之一秒。

詳細資訊:"FFFFFF" 自訂格式規範。 2009-06-15T13:45:30.6175420 - > 617542

2009-06-15T13:45:30.0000005 - > (沒有輸出) "FFFFFFF" 如果不是零,則為日期和時間值中的千萬分之一秒。

詳細資訊:"FFFFFFF" 自訂格式規範。 2009-06-15T13:45:30.6175425 - > 6175425

2009-06-15T13:45:30.0001150 - > 000115 "g"、"gg" 週期或紀元。

詳細資訊:"g" 或 "gg" 自訂格式規範。 2009-06-15T13:45:30.6170000 - > A.D。 採用 12 小時制的小時,從 1 到 12。

詳細資訊: 「h」 自訂格式規範。 2009-06-15T01:45:30 - > 1

2009-06-15T13:45:30 - > 1 採用 12 小時制的小時,從 01 到 12。

詳細資訊: 「hh」 自訂格式規範。 2009-06-15T01:45:30 - > 01

2009-06-15T13:45:30 - > 01 採用 24 小時制的小時,從 0 到 23。

詳細資訊:"H" 自訂格式規範。 2009-06-15T01:45:30 - > 1

2009-06-15T13:45:30 - > 13 採用 24 小時制的小時,從 00 到 23。

詳細資訊:"HH" 自訂格式規範。 2009-06-15T01:45:30 - > 01

2009-06-15T13:45:30 - > 13 時區資訊。

詳細資訊:"K" 自訂格式規範。 搭配 DateTime 值:

2009-06-15T13:45:30,種類未指定 ->

2009-06-15T13:45:30,Kind Utc - > Z

2009-06-15T13:45:30,Kind Local - > -07:00 (取決於本機電腦設定)

搭配 DateTimeOffset 值:

2009-06-15T01:45:30-07:00 -- > -07:00

2009-06-15T08:45:30+00:00 -- > +00:00 分鐘,從 0 到 59。

詳細資訊: 「m」 自訂格式規範。 2009-06-15T01:09:30 - > 9

2009-06-15T13:29:30 - > 29 分鐘,從 00 到 59。

詳細資訊:"mm" 自訂格式規範。 2009-06-15T01:09:30 - > 09

2009-06-15T01:45:30 - > 45 月份,從 1 到 12。

詳細資訊:"M" 自訂格式規範。 2009-06-15T13:45:30 -> 6 月份,從 01 到 12。

詳細資訊: 「MM」 自訂格式規範。 2009-06-15T13:45:30 -> 06 "MMM" 月份的縮寫名稱。

詳細資訊:"MMM" 自訂格式規範。 2009-06-15T13:45:30 - > 6 月 (en-US)

2009-06-15T13:45:30 - > juin (fr-FR)

2009-06-15T13:45:30 - > zu-ZA (zu-ZA) "MMMM" 月份的完整名稱。

詳細資訊:"MMMM" 自訂格式規範。 2009-06-15T13:45:30 - > 6 月 (en-US)

2009-06-15T13:45:30 - > juni (da-DK)

2009-06-15T13:45:30 - > uJuni (zu-ZA) 秒數,從 0 到 59。

詳細資訊:"s" 自訂格式規範。 2009-06-15T13:45:09 -> 9 秒數,從 00 到 59。

詳細資訊:"ss" 自訂格式規範。 2009-06-15T13:45:09 -> 09 AM/PM 指示項的第一個字元。

詳細資訊:"t" 自訂格式規範。 2009-06-15T13:45:30 - > P (en-US)

2009-06-15T13:45:30 - > (ja-JP)

2009-06-15T13:45:30 - > (fr-FR) AM/PM 指示項。

詳細資訊:"tt" 自訂格式規範。 2009-06-15T13:45:30 - > PM (en-US)

2009-06-15T13:45:30 - > (ja-JP)

2009-06-15T13:45:30 - > (fr-FR) 年份,從 0 到 99。

詳細資訊:"y" 自訂格式規範。 0001-01-01T00:00:00 - > 1

0900-01-01T00:00:00 - > 0

1900-01-01T00:00:00 - > 0

2009-06-15T13:45:30 - > 9

2019-06-15T13:45:30 - > 19 年份,從 00 到 99。

詳細資訊:"yy" 自訂格式規範。 0001-01-01T00:00:00 - > 01

0900-01-01T00:00:00 - > 00

1900-01-01T00:00:00 - > 00

2019-06-15T13:45:30 - > 19 "yyy" 年份,至少三位數。

詳細資訊:"yyy" 自訂格式規範。 0001-01-01T00:00:00 - > 001

0900-01-01T00:00:00 - > 900

1900-01-01T00:00:00 - > 1900

2009-06-15T13:45:30 - > 2009 "yyyy" 以四位數表示的年份。

詳細資訊:"yyyy" 自訂格式規範。 0001-01-01T00:00:00 - > 0001

0900-01-01T00:00:00 - > 0900

1900-01-01T00:00:00 - > 1900

2009-06-15T13:45:30 - > 2009 "yyyyy" 以五位數表示的年份。

詳細資訊:"yyyyy" 自訂格式規範。 0001-01-01T00:00:00 - > 00001

2009-06-15T13:45:30 - > 02009 與 UTC 相差的時數,不加上前置零。

詳細資訊:"z" 自訂格式規範。 2009-06-15T13:45:30-07:00 - > -7 與 UTC 相差的時數,單一位數值會加上前置零。

詳細資訊:"zz" 自訂格式規範。 2009-06-15T13:45:30-07:00 - > -07 "zzz" 與 UTC 相差的時數和分鐘數。

詳細資訊:"zzz" 自訂格式規範。 2009-06-15T13:45:30-07:00 - > -07:00 時間分隔符號。

詳細資訊:":" 自訂格式規範。 2009-06-15T13:45:30 - > : (en-US)

2009-06-15T13:45:30 - > 。 (it-IT)

2009-06-15T13:45:30 - > : (ja-JP) 日期分隔符號。

詳細資訊: 「/」 自訂格式規範。 2009-06-15T13:45:30 - > / (en-US)

2009-06-15T13:45:30 - > (ar-DZ)

2009-06-15T13:45:30 - > 。 (tr-TR) 「string

'string' 常值字串分隔符號。

詳細資訊︰字元常值。 2009-06-15T13:45:30 (「arr:」 h:m t) - > arr: 1:45 P

2009-06-15T13:45:30 ('arr:' h:m t) - > arr: 1:45 P 將下列字元定義為自訂格式規範。

詳細資訊:使用單一自訂格式規範。 2009-06-15T13:45:30 (%h) - > 1 逸出字元。

詳細資訊︰字元常值使用逸出字元。 2009-06-15T13:45:30 (h \h) - > 1 h 字元會原封不動地複製到結果字串。

詳細資訊︰字元常值。 2009-06-15T01:45:30 (arr hh:mm t) - > arr 01:45 A

下列各節提供每個自訂日期和時間格式規範的其他資訊。 除非特別註明,否則每個規範都會產生相同的字串表示,無論是與 DateTime 值或 DateTimeOffset 值搭配使用。

Day 「d」 格式規範

"d" 自訂格式規範

"d" 自訂格式規範以 1 到 31 的數字來表示月份天數。 單一位數的天數會格式化為沒有前置零的數字。

如果單獨使用 "d" 格式規範,而沒有其他自訂格式規範,則會將它解譯為 "d" 標準日期和時間格式規範。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

下列範例會在幾個格式字串中加入 "d" 自訂格式規範。

DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15);
Console.WriteLine(date1.ToString("d, M",
                  CultureInfo.InvariantCulture));
// Displays 29, 8
Console.WriteLine(date1.ToString("d MMMM",
                  CultureInfo.CreateSpecificCulture("en-US")));
// Displays 29 August
Console.WriteLine(date1.ToString("d MMMM",
                  CultureInfo.CreateSpecificCulture("es-MX")));
// Displays 29 agosto
Dim date1 As Date = #08/29/2008 7:27:15PM#
Console.WriteLine(date1.ToString("d, M", _
                  CultureInfo.InvariantCulture))
' Displays 29, 8
Console.WriteLine(date1.ToString("d MMMM", _
                  CultureInfo.CreateSpecificCulture("en-US")))
' Displays 29 August
Console.WriteLine(date1.ToString("d MMMM", _
                  CultureInfo.CreateSpecificCulture("es-MX")))
' Displays 29 agosto                                                

"dd" 自訂格式規範

"dd" 自訂格式字串以 01 到 31 的數字來表示月份天數。 單一位數的天數會格式化為有前置零的數字。

下列範例會在自訂格式字串中加入 "dd" 自訂格式規範。

DateTime date1 = new DateTime(2008, 1, 2, 6, 30, 15);
Console.WriteLine(date1.ToString("dd, MM",
                  CultureInfo.InvariantCulture));
// 02, 01
Dim date1 As Date = #1/2/2008 6:30:15AM#
Console.WriteLine(date1.ToString("dd, MM", _
                  CultureInfo.InvariantCulture))
' 02, 01

"ddd" 自訂格式規範

"ddd" 自訂格式規範表示星期幾的縮寫名稱。 星期幾的當地語系化縮寫名稱是擷取自目前或指定之文化特性的 DateTimeFormatInfo.AbbreviatedDayNames 屬性。

下列範例會在自訂格式字串中加入 "ddd" 自訂格式規範。

DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15);
Console.WriteLine(date1.ToString("ddd d MMM",
                  CultureInfo.CreateSpecificCulture("en-US")));
// Displays Fri 29 Aug
Console.WriteLine(date1.ToString("ddd d MMM",
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays ven. 29 août
Dim date1 As Date = #08/29/2008 7:27:15PM#
Console.WriteLine(date1.ToString("ddd d MMM", _
                  CultureInfo.CreateSpecificCulture("en-US")))
' Displays Fri 29 Aug
Console.WriteLine(date1.ToString("ddd d MMM", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays ven. 29 août                                                

"dddd" 自訂格式規範

"dddd" 自訂格式規範 (加上任意個額外的 "d" 規範) 表示星期幾的完整名稱。 星期幾的當地語系化名稱是擷取自目前或指定之文化特性的 DateTimeFormatInfo.DayNames 屬性。

下列範例會在自訂格式字串中加入 "dddd" 自訂格式規範。

DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15);
Console.WriteLine(date1.ToString("dddd dd MMMM",
                  CultureInfo.CreateSpecificCulture("en-US")));
// Displays Friday 29 August
Console.WriteLine(date1.ToString("dddd dd MMMM",
                  CultureInfo.CreateSpecificCulture("it-IT")));
// Displays venerdì 29 agosto
Dim date1 As Date = #08/29/2008 7:27:15PM#
Console.WriteLine(date1.ToString("dddd dd MMMM", _
                  CultureInfo.CreateSpecificCulture("en-US")))
' Displays Friday 29 August
Console.WriteLine(date1.ToString("dddd dd MMMM", _
                  CultureInfo.CreateSpecificCulture("it-IT")))
' Displays venerdì 29 agosto                                          

小寫秒 「f」 分數規範

"f" 自訂格式規範

"f" 自訂格式規範表示秒數的一位有效小數位數,也就是說,它表示日期和時間值中的十分之一秒。

如果單獨使用 "f" 格式規範,而沒有其他格式規範,則會將它解譯為 "f" 標準日期和時間格式規範。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

當您使用 "f" 格式規範做為提供給 ParseExactTryParseExactParseExactTryParseExact 方法的一部分格式字串時,"f" 格式規範的數目表示秒數部分最重要的小數位數,必須存在此小數位數才能成功剖析字串。

下列範例會在自訂格式字串中加入 "f" 自訂格式規範。

DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15, 18);
CultureInfo ci = CultureInfo.InvariantCulture;
Console.WriteLine(date1.ToString("hh:mm:ss.f", ci));
// Displays 07:27:15.0
Console.WriteLine(date1.ToString("hh:mm:ss.F", ci));
// Displays 07:27:15
Console.WriteLine(date1.ToString("hh:mm:ss.ff", ci));
// Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.FF", ci));
// Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci));
// Displays 07:27:15.018
Console.WriteLine(date1.ToString("hh:mm:ss.FFF", ci));
// Displays 07:27:15.018
Dim date1 As New Date(2008, 8, 29, 19, 27, 15, 018)
Dim ci As CultureInfo = CultureInfo.InvariantCulture
Console.WriteLine(date1.ToString("hh:mm:ss.f", ci))
' Displays 07:27:15.0
Console.WriteLine(date1.ToString("hh:mm:ss.F", ci))
' Displays 07:27:15
Console.WriteLine(date1.ToString("hh:mm:ss.ff", ci))
' Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.FF", ci))
' Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci))
' Displays 07:27:15.018
Console.WriteLine(date1.ToString("hh:mm:ss.FFF", ci))
' Displays 07:27:15.018

"ff" 自訂格式規範

"ff" 自訂格式規範表示秒數的兩位有效小數位數,也就是說,它表示日期和時間值中的百分之一秒。

下列範例會在自訂格式字串中加入 "ff" 自訂格式規範。

DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15, 18);
CultureInfo ci = CultureInfo.InvariantCulture;
Console.WriteLine(date1.ToString("hh:mm:ss.f", ci));
// Displays 07:27:15.0
Console.WriteLine(date1.ToString("hh:mm:ss.F", ci));
// Displays 07:27:15
Console.WriteLine(date1.ToString("hh:mm:ss.ff", ci));
// Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.FF", ci));
// Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci));
// Displays 07:27:15.018
Console.WriteLine(date1.ToString("hh:mm:ss.FFF", ci));
// Displays 07:27:15.018
Dim date1 As New Date(2008, 8, 29, 19, 27, 15, 018)
Dim ci As CultureInfo = CultureInfo.InvariantCulture
Console.WriteLine(date1.ToString("hh:mm:ss.f", ci))
' Displays 07:27:15.0
Console.WriteLine(date1.ToString("hh:mm:ss.F", ci))
' Displays 07:27:15
Console.WriteLine(date1.ToString("hh:mm:ss.ff", ci))
' Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.FF", ci))
' Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci))
' Displays 07:27:15.018
Console.WriteLine(date1.ToString("hh:mm:ss.FFF", ci))
' Displays 07:27:15.018

"fff" 自訂格式規範

"fff" 自訂格式規範表示秒數的三位有效小數位數,也就是說,它表示日期和時間值中的千分之一秒。

下列範例會在自訂格式字串中加入 "fff" 自訂格式規範。

DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15, 18);
CultureInfo ci = CultureInfo.InvariantCulture;
Console.WriteLine(date1.ToString("hh:mm:ss.f", ci));
// Displays 07:27:15.0
Console.WriteLine(date1.ToString("hh:mm:ss.F", ci));
// Displays 07:27:15
Console.WriteLine(date1.ToString("hh:mm:ss.ff", ci));
// Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.FF", ci));
// Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci));
// Displays 07:27:15.018
Console.WriteLine(date1.ToString("hh:mm:ss.FFF", ci));
// Displays 07:27:15.018
Dim date1 As New Date(2008, 8, 29, 19, 27, 15, 018)
Dim ci As CultureInfo = CultureInfo.InvariantCulture
Console.WriteLine(date1.ToString("hh:mm:ss.f", ci))
' Displays 07:27:15.0
Console.WriteLine(date1.ToString("hh:mm:ss.F", ci))
' Displays 07:27:15
Console.WriteLine(date1.ToString("hh:mm:ss.ff", ci))
' Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.FF", ci))
' Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci))
' Displays 07:27:15.018
Console.WriteLine(date1.ToString("hh:mm:ss.FFF", ci))
' Displays 07:27:15.018

"ffff" 自訂格式規範

"ffff" 自訂格式規範表示秒數的四位有效小數位數,也就是說,它表示日期和時間值中的萬分之一秒。

雖然時間值的秒數部分可以顯示到萬分之一秒,但該值可能沒有太大的意義。 日期和時間值的精確度會根據系統時鐘的解析度而定。 在 Windows NT 3.5 (含) 以上版本和 Windows Vista 作業系統中,時鐘的解析度大約為 10-15 毫秒。

"fffff" 自訂格式規範

"fffff" 自訂格式規範表示秒數的五位有效小數位數,也就是說,它表示日期和時間值中的十萬分之一秒。

雖然時間值的秒數部分可以顯示到萬分之一秒,但該值可能沒有太大的意義。 日期和時間值的精確度會根據系統時鐘的解析度而定。 在 Windows NT 3.5 (含) 以上版本和 Windows Vista 作業系統中,時鐘的解析度大約為 10-15 毫秒。

"ffffff" 自訂格式規範

"ffffff" 自訂格式規範表示秒數的六位有效小數位數,也就是說,它表示日期和時間值中的百萬分之一秒。

雖然時間值的秒數部分可以顯示到百萬分之一秒,但該值可能沒有太大的意義。 日期和時間值的精確度會根據系統時鐘的解析度而定。 在 Windows NT 3.5 (含) 以上版本和 Windows Vista 作業系統中,時鐘的解析度大約為 10-15 毫秒。

"fffffff" 自訂格式規範

"fffffff" 自訂格式規範表示秒數的七位有效小數位數,也就是說,它表示日期和時間值中的千萬分之一秒。

雖然時間值的秒數部分可以顯示到千萬分之一秒,但該值可能沒有太大的意義。 日期和時間值的精確度會根據系統時鐘的解析度而定。 在 Windows NT 3.5 (含) 以上版本和 Windows Vista 作業系統中,時鐘的解析度大約為 10-15 毫秒。

大寫秒 「F」 分數規範

"F" 自訂格式規範

"F" 自訂格式規範表示秒數的一位有效小數位數,也就是說,它表示日期和時間值中的十分之一秒。 如果數位為零,則不會顯示任何專案,而且不會顯示緊接在秒數後面的小數點。

如果單獨使用 "F" 格式規範,而沒有其他格式規範,則會將它解譯為 "F" 標準日期和時間格式規範。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

ParseExactTryParseExactParseExactTryParseExact 方法搭配使用的 "F" 格式規範數目,表示秒數部分最重要小數位數的上限,要成功剖析字串就不能超過此小數位數。

下列範例會在自訂格式字串中加入 "F" 自訂格式規範。

DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15, 18);
CultureInfo ci = CultureInfo.InvariantCulture;
Console.WriteLine(date1.ToString("hh:mm:ss.f", ci));
// Displays 07:27:15.0
Console.WriteLine(date1.ToString("hh:mm:ss.F", ci));
// Displays 07:27:15
Console.WriteLine(date1.ToString("hh:mm:ss.ff", ci));
// Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.FF", ci));
// Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci));
// Displays 07:27:15.018
Console.WriteLine(date1.ToString("hh:mm:ss.FFF", ci));
// Displays 07:27:15.018
Dim date1 As New Date(2008, 8, 29, 19, 27, 15, 018)
Dim ci As CultureInfo = CultureInfo.InvariantCulture
Console.WriteLine(date1.ToString("hh:mm:ss.f", ci))
' Displays 07:27:15.0
Console.WriteLine(date1.ToString("hh:mm:ss.F", ci))
' Displays 07:27:15
Console.WriteLine(date1.ToString("hh:mm:ss.ff", ci))
' Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.FF", ci))
' Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci))
' Displays 07:27:15.018
Console.WriteLine(date1.ToString("hh:mm:ss.FFF", ci))
' Displays 07:27:15.018

"FF" 自訂格式規範

"FF" 自訂格式規範表示秒數的兩位有效小數位數,也就是說,它表示日期和時間值中的百分之一秒。 不會顯示尾端零。 如果兩個有效位數為零,則不會顯示任何專案,在此情況下,也不會顯示緊接秒數的小數點。

下列範例會在自訂格式字串中加入 "FF" 自訂格式規範。

DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15, 18);
CultureInfo ci = CultureInfo.InvariantCulture;
Console.WriteLine(date1.ToString("hh:mm:ss.f", ci));
// Displays 07:27:15.0
Console.WriteLine(date1.ToString("hh:mm:ss.F", ci));
// Displays 07:27:15
Console.WriteLine(date1.ToString("hh:mm:ss.ff", ci));
// Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.FF", ci));
// Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci));
// Displays 07:27:15.018
Console.WriteLine(date1.ToString("hh:mm:ss.FFF", ci));
// Displays 07:27:15.018
Dim date1 As New Date(2008, 8, 29, 19, 27, 15, 018)
Dim ci As CultureInfo = CultureInfo.InvariantCulture
Console.WriteLine(date1.ToString("hh:mm:ss.f", ci))
' Displays 07:27:15.0
Console.WriteLine(date1.ToString("hh:mm:ss.F", ci))
' Displays 07:27:15
Console.WriteLine(date1.ToString("hh:mm:ss.ff", ci))
' Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.FF", ci))
' Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci))
' Displays 07:27:15.018
Console.WriteLine(date1.ToString("hh:mm:ss.FFF", ci))
' Displays 07:27:15.018

"FFF" 自訂格式規範

"FFF" 自訂格式規範表示秒數的三位有效小數位數,也就是說,它表示日期和時間值中的千分之一秒。 不會顯示尾端零。 如果三個有效位數為零,則不會顯示任何專案,在該案例中,不會顯示緊接秒數的小數點。

下列範例會在自訂格式字串中加入 "FFF" 自訂格式規範。

DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15, 18);
CultureInfo ci = CultureInfo.InvariantCulture;
Console.WriteLine(date1.ToString("hh:mm:ss.f", ci));
// Displays 07:27:15.0
Console.WriteLine(date1.ToString("hh:mm:ss.F", ci));
// Displays 07:27:15
Console.WriteLine(date1.ToString("hh:mm:ss.ff", ci));
// Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.FF", ci));
// Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci));
// Displays 07:27:15.018
Console.WriteLine(date1.ToString("hh:mm:ss.FFF", ci));
// Displays 07:27:15.018
Dim date1 As New Date(2008, 8, 29, 19, 27, 15, 018)
Dim ci As CultureInfo = CultureInfo.InvariantCulture
Console.WriteLine(date1.ToString("hh:mm:ss.f", ci))
' Displays 07:27:15.0
Console.WriteLine(date1.ToString("hh:mm:ss.F", ci))
' Displays 07:27:15
Console.WriteLine(date1.ToString("hh:mm:ss.ff", ci))
' Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.FF", ci))
' Displays 07:27:15.01
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci))
' Displays 07:27:15.018
Console.WriteLine(date1.ToString("hh:mm:ss.FFF", ci))
' Displays 07:27:15.018

"FFFF" 自訂格式規範

"FFFF" 自訂格式規範表示秒數的四位有效小數位數,也就是說,它表示日期和時間值中的萬分之一秒。 不會顯示尾端零。 如果四個有效位數為零,則不會顯示任何專案,在該案例中,不會顯示緊接秒數的小數點。

雖然時間值的秒數部分可以顯示到萬分之一秒,但該值可能沒有太大的意義。 日期和時間值的精確度會根據系統時鐘的解析度而定。 在 Windows NT 3.5 (含) 以上版本和 Windows Vista 作業系統中,時鐘的解析度大約為 10-15 毫秒。

"FFFFF" 自訂格式規範

"FFFFF" 自訂格式規範表示秒數的五位有效小數位數,也就是說,它表示日期和時間值中的十萬分之一秒。 不會顯示尾端零。 如果五個有效位數為零,則不會顯示任何專案,在此情況下,也不會顯示緊接秒數的小數點。

雖然時間值的秒數部分可以顯示到萬分之一秒,但該值可能沒有太大的意義。 日期和時間值的精確度會根據系統時鐘的解析度而定。 在 Windows NT 3.5 (含) 以上版本和 Windows Vista 作業系統中,時鐘的解析度大約為 10-15 毫秒。

"FFFFFF" 自訂格式規範

"FFFFFF" 自訂格式規範表示秒數的六位有效小數位數,也就是說,它表示日期和時間值中的百萬分之一秒。 不會顯示尾端零。 如果六個有效位數為零,則不會顯示任何專案,在此情況下,也不會顯示緊接秒數的小數點。

雖然時間值的秒數部分可以顯示到百萬分之一秒,但該值可能沒有太大的意義。 日期和時間值的精確度會根據系統時鐘的解析度而定。 在 Windows NT 3.5 (含) 以上版本和 Windows Vista 作業系統中,時鐘的解析度大約為 10-15 毫秒。

"FFFFFFF" 自訂格式規範

"FFFFFFF" 自訂格式規範表示秒數的七位有效小數位數,也就是說,它表示日期和時間值中的千萬分之一秒。 不會顯示尾端零。 如果七個有效位數為零,則不會顯示任何專案,在此情況下,也不會顯示緊接秒數的小數點。

雖然時間值的秒數部分可以顯示到千萬分之一秒,但該值可能沒有太大的意義。 日期和時間值的精確度會根據系統時鐘的解析度而定。 在 Windows NT 3.5 (含) 以上版本和 Windows Vista 作業系統中,時鐘的解析度大約為 10-15 毫秒。

紀元 「g」 格式規範

"g" 或 "gg" 自訂格式規範

「g」 或 「gg」 自訂格式規範 (加上任何數目的額外 「g」 規範) 代表句號或紀元,例如 A.D。如果要格式化的日期沒有相關聯的句號或紀元字串,則格式化作業會忽略此規範。

如果單獨使用 "g" 格式規範,而沒有其他自訂格式規範,則會將它解譯為 "g" 標準日期和時間格式規範。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

下列範例會在自訂格式字串中加入 "g" 自訂格式規範。

DateTime date1 = new DateTime(70, 08, 04);
Console.WriteLine(date1.ToString("MM/dd/yyyy g",
                  CultureInfo.InvariantCulture));
// Displays 08/04/0070 A.D.
Console.WriteLine(date1.ToString("MM/dd/yyyy g",
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 08/04/0070 ap. J.-C.
Dim date1 As Date = #08/04/0070#
Console.WriteLine(date1.ToString("MM/dd/yyyy g", _
                  CultureInfo.InvariantCulture))
' Displays 08/04/0070 A.D.                        
Console.WriteLine(date1.ToString("MM/dd/yyyy g", _
                  CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 08/04/0070 ap. J.-C.

小寫小時 「h」 格式規範

"h" 自訂格式規範

"h" 自訂格式規範以 1 到 12 的數字來表示小時,也就是以 12 小時制來表示小時,從午夜或中午開始計算整點時數。 午夜後的特定小時與下午的相同小時會難以區分。 小時是不進位的,而且單一位數的小時會格式化為沒有前置零的數字。 例如,假設時間為上午或下午 5:43,則此自訂格式規範會顯示 "5"。

如果單獨使用 "h" 格式規範,而沒有其他自訂格式規範,則會將它解譯為標準日期和時間格式規範,並擲回 FormatException。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

下列範例會在自訂格式字串中加入 "h" 自訂格式規範。

DateTime date1;
date1 = new DateTime(2008, 1, 1, 18, 9, 1);
Console.WriteLine(date1.ToString("h:m:s.F t",
                  CultureInfo.InvariantCulture));
// Displays 6:9:1 P
Console.WriteLine(date1.ToString("h:m:s.F t",
                  CultureInfo.CreateSpecificCulture("el-GR")));
// Displays 6:9:1 µ
date1 = new DateTime(2008, 1, 1, 18, 9, 1, 500);
Console.WriteLine(date1.ToString("h:m:s.F t",
                  CultureInfo.InvariantCulture));
// Displays 6:9:1.5 P
Console.WriteLine(date1.ToString("h:m:s.F t",
                  CultureInfo.CreateSpecificCulture("el-GR")));
// Displays 6:9:1.5 µ
Dim date1 As Date
date1 = #6:09:01PM#
Console.WriteLine(date1.ToString("h:m:s.F t", _
                  CultureInfo.InvariantCulture))
' Displays 6:9:1 P
Console.WriteLine(date1.ToString("h:m:s.F t", _
                  CultureInfo.CreateSpecificCulture("el-GR")))
' Displays 6:9:1 µ                        
date1 = New Date(2008, 1, 1, 18, 9, 1, 500)
Console.WriteLine(date1.ToString("h:m:s.F t", _
                  CultureInfo.InvariantCulture))
' Displays 6:9:1.5 P
Console.WriteLine(date1.ToString("h:m:s.F t", _
                  CultureInfo.CreateSpecificCulture("el-GR")))
' Displays 6:9:1.5 µ

"hh" 自訂格式規範

"hh" 自訂格式規範 (加上任意個額外的 "h" 規範) 以 01 到 12 的數字來表示小時,也就是以 12 小時制來表示小時,從午夜或中午開始計算整點時數。 午夜後的特定小時與下午的相同小時會難以區分。 小時是不進位的,而且單一位數的小時會格式化為有前置零的數字。 例如,假設時間為上午或下午 5:43,則此格式規範會顯示 "05"。

下列範例會在自訂格式字串中加入 "hh" 自訂格式規範。

DateTime date1;
date1 = new DateTime(2008, 1, 1, 18, 9, 1);
Console.WriteLine(date1.ToString("hh:mm:ss tt",
                  CultureInfo.InvariantCulture));
// Displays 06:09:01 PM
Console.WriteLine(date1.ToString("hh:mm:ss tt",
                  CultureInfo.CreateSpecificCulture("hu-HU")));
// Displays 06:09:01 du.
date1 = new DateTime(2008, 1, 1, 18, 9, 1, 500);
Console.WriteLine(date1.ToString("hh:mm:ss.ff tt",
                  CultureInfo.InvariantCulture));
// Displays 06:09:01.50 PM
Console.WriteLine(date1.ToString("hh:mm:ss.ff tt",
                  CultureInfo.CreateSpecificCulture("hu-HU")));
// Displays 06:09:01.50 du.
Dim date1 As Date
date1 = #6:09:01PM#
Console.WriteLine(date1.ToString("hh:mm:ss tt", _
                  CultureInfo.InvariantCulture))
' Displays 06:09:01 PM                        
Console.WriteLine(date1.ToString("hh:mm:ss tt", _
                  CultureInfo.CreateSpecificCulture("hu-HU")))
' Displays 06:09:01 du.
date1 = New Date(2008, 1, 1, 18, 9, 1, 500)
Console.WriteLine(date1.ToString("hh:mm:ss.ff tt", _
                  CultureInfo.InvariantCulture))
' Displays 06:09:01.50 PM                        
Console.WriteLine(date1.ToString("hh:mm:ss.ff tt", _
                  CultureInfo.CreateSpecificCulture("hu-HU")))
' Displays 06:09:01.50 du.

大寫小時 「H」 格式規範

"H" 自訂格式規範

"H" 自訂格式規範以 0 到 23 的數字來表示小時,也就是採用以零為起始的 24 小時制來表示小時,從午夜開始計算時數。 單一位數的小時會格式化為沒有前置零的數字。

如果單獨使用 "H" 格式規範,而沒有其他自訂格式規範,則會將它解譯為標準日期和時間格式規範,並擲回 FormatException。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

下列範例會在自訂格式字串中加入 "H" 自訂格式規範。

DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1);
Console.WriteLine(date1.ToString("H:mm:ss",
                  CultureInfo.InvariantCulture));
// Displays 6:09:01
Dim date1 As Date = #6:09:01AM#
Console.WriteLine(date1.ToString("H:mm:ss", _
                  CultureInfo.InvariantCulture))
' Displays 6:09:01                        

"HH" 自訂格式規範

"HH" 自訂格式規範 (加上任意個額外的 "H" 規範) 以 00 到 23 的數字來表示小時,也就是採用以零為起始的 24 小時制來表示小時,從午夜開始計算時數。 單一位數的小時會格式化為具有前置零的數字。

下列範例會在自訂格式字串中加入 "HH" 自訂格式規範。

DateTime date1 = new DateTime(2008, 1, 1, 6, 9, 1);
Console.WriteLine(date1.ToString("HH:mm:ss",
                  CultureInfo.InvariantCulture));
// Displays 06:09:01
Dim date1 As Date = #6:09:01AM#
Console.WriteLine(date1.ToString("HH:mm:ss", _
                  CultureInfo.InvariantCulture))
' Displays 06:09:01                        

時區 「K」 格式規範

"K" 自訂格式規範

"K" 自訂格式規範表示日期和時間值的時區資訊。 與 DateTime 值搭配使用這個格式規範時,結果字串會由 DateTime.Kind 屬性的值定義:

  • 對於當地時區 (屬性值為 DateTime.KindDateTimeKind.Local) ,此規範會產生結果字串,其中包含來自國際標準時間 (UTC) 的本機位移;例如 「-07:00」。

  • 若為 UTC 時間 (DateTime.KindDateTimeKind.Utc 屬性值),結果字串會包含 "Z" 字元來表示 UTC 日期。

  • 若為未指定時區的時間 (DateTime.Kind 屬性等於 DateTimeKind.Unspecified 的時間),結果就相當於 String.Empty

    若為 DateTimeOffset 值,"K" 格式規範相當於 "zzz" 格式規範,所產生的結果字串會包含 DateTimeOffset 值與 UTC 之間的時差。

    如果單獨使用 "K" 格式規範,而沒有其他自訂格式規範,則會將它解譯為標準日期和時間格式規範,並擲回 FormatException。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

    下列範例會顯示美國太平洋時區中,"K" 自訂格式規範與各種 DateTimeDateTimeOffset 值搭配使用所產生的結果字串。

    Console.WriteLine(DateTime.Now.ToString("%K"));
    // Displays -07:00
    Console.WriteLine(DateTime.UtcNow.ToString("%K"));
    // Displays Z
    Console.WriteLine("'{0}'",
                      DateTime.SpecifyKind(DateTime.Now,
                           DateTimeKind.Unspecified).ToString("%K"));
    // Displays ''
    Console.WriteLine(DateTimeOffset.Now.ToString("%K"));
    // Displays -07:00
    Console.WriteLine(DateTimeOffset.UtcNow.ToString("%K"));
    // Displays +00:00
    Console.WriteLine(new DateTimeOffset(2008, 5, 1, 6, 30, 0,
                          new TimeSpan(5, 0, 0)).ToString("%K"));
    // Displays +05:00
    
    Console.WriteLine(Date.Now.ToString("%K"))
    ' Displays -07:00
    Console.WriteLine(Date.UtcNow.ToString("%K"))
    ' Displays Z      
    Console.WriteLine("'{0}'", _
                      Date.SpecifyKind(Date.Now, _
                                       DateTimeKind.Unspecified). _
                      ToString("%K"))
    ' Displays ''      
    Console.WriteLine(DateTimeOffset.Now.ToString("%K"))
    ' Displays -07:00
    Console.WriteLine(DateTimeOffset.UtcNow.ToString("%K"))
    ' Displays +00:00
    Console.WriteLine(New DateTimeOffset(2008, 5, 1, 6, 30, 0, _
                                         New TimeSpan(5, 0, 0)). _
                      ToString("%K"))
    ' Displays +05:00                        
    

    分鐘 「m」 格式規範

    "m" 自訂格式規範

    "m" 自訂格式規範以 0 到 59 的數字來表示分鐘。 分鐘表示自上個整點以來已經過的完整分鐘數。 單一位數的分鐘會格式化為沒有前置零的數字。

    如果單獨使用 "m" 格式規範,而沒有其他自訂格式規範,則會將它解譯為 "m" 標準日期和時間格式規範。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

    下列範例會在自訂格式字串中加入 "m" 自訂格式規範。

    DateTime date1;
    date1 = new DateTime(2008, 1, 1, 18, 9, 1);
    Console.WriteLine(date1.ToString("h:m:s.F t",
                      CultureInfo.InvariantCulture));
    // Displays 6:9:1 P
    Console.WriteLine(date1.ToString("h:m:s.F t",
                      CultureInfo.CreateSpecificCulture("el-GR")));
    // Displays 6:9:1 µ
    date1 = new DateTime(2008, 1, 1, 18, 9, 1, 500);
    Console.WriteLine(date1.ToString("h:m:s.F t",
                      CultureInfo.InvariantCulture));
    // Displays 6:9:1.5 P
    Console.WriteLine(date1.ToString("h:m:s.F t",
                      CultureInfo.CreateSpecificCulture("el-GR")));
    // Displays 6:9:1.5 µ
    
    Dim date1 As Date
    date1 = #6:09:01PM#
    Console.WriteLine(date1.ToString("h:m:s.F t", _
                      CultureInfo.InvariantCulture))
    ' Displays 6:9:1 P
    Console.WriteLine(date1.ToString("h:m:s.F t", _
                      CultureInfo.CreateSpecificCulture("el-GR")))
    ' Displays 6:9:1 µ                        
    date1 = New Date(2008, 1, 1, 18, 9, 1, 500)
    Console.WriteLine(date1.ToString("h:m:s.F t", _
                      CultureInfo.InvariantCulture))
    ' Displays 6:9:1.5 P
    Console.WriteLine(date1.ToString("h:m:s.F t", _
                      CultureInfo.CreateSpecificCulture("el-GR")))
    ' Displays 6:9:1.5 µ
    

    "mm" 自訂格式規範

    "mm" 自訂格式規範 (加上任意個額外的 "m" 規範) 以 00 到 59 的數字來表示分鐘。 分鐘表示自上個整點以來已經過的完整分鐘數。 單一位數的分鐘會格式化為具有前置零的數字。

    下列範例會在自訂格式字串中加入 "mm" 自訂格式規範。

    DateTime date1;
    date1 = new DateTime(2008, 1, 1, 18, 9, 1);
    Console.WriteLine(date1.ToString("hh:mm:ss tt",
                      CultureInfo.InvariantCulture));
    // Displays 06:09:01 PM
    Console.WriteLine(date1.ToString("hh:mm:ss tt",
                      CultureInfo.CreateSpecificCulture("hu-HU")));
    // Displays 06:09:01 du.
    date1 = new DateTime(2008, 1, 1, 18, 9, 1, 500);
    Console.WriteLine(date1.ToString("hh:mm:ss.ff tt",
                      CultureInfo.InvariantCulture));
    // Displays 06:09:01.50 PM
    Console.WriteLine(date1.ToString("hh:mm:ss.ff tt",
                      CultureInfo.CreateSpecificCulture("hu-HU")));
    // Displays 06:09:01.50 du.
    
    Dim date1 As Date
    date1 = #6:09:01PM#
    Console.WriteLine(date1.ToString("hh:mm:ss tt", _
                      CultureInfo.InvariantCulture))
    ' Displays 06:09:01 PM                        
    Console.WriteLine(date1.ToString("hh:mm:ss tt", _
                      CultureInfo.CreateSpecificCulture("hu-HU")))
    ' Displays 06:09:01 du.
    date1 = New Date(2008, 1, 1, 18, 9, 1, 500)
    Console.WriteLine(date1.ToString("hh:mm:ss.ff tt", _
                      CultureInfo.InvariantCulture))
    ' Displays 06:09:01.50 PM                        
    Console.WriteLine(date1.ToString("hh:mm:ss.ff tt", _
                      CultureInfo.CreateSpecificCulture("hu-HU")))
    ' Displays 06:09:01.50 du.
    

    月份 「M」 格式規範

    "M" 自訂格式規範

    "M" 自訂格式規範以 1 到 12 的數字來表示月份 (如果是有 13 個月的行事曆則從 1 到 13)。 單一位數的月份會格式化為沒有前置零的數字。

    如果單獨使用 "M" 格式規範,而沒有其他自訂格式規範,則會將它解譯為 "M" 標準日期和時間格式規範。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

    下列範例會在自訂格式字串中加入 "M" 自訂格式規範。

    DateTime date1 = new DateTime(2008, 8, 18);
    Console.WriteLine(date1.ToString("(M) MMM, MMMM",
                      CultureInfo.CreateSpecificCulture("en-US")));
    // Displays (8) Aug, August
    Console.WriteLine(date1.ToString("(M) MMM, MMMM",
                      CultureInfo.CreateSpecificCulture("nl-NL")));
    // Displays (8) aug, augustus
    Console.WriteLine(date1.ToString("(M) MMM, MMMM",
                      CultureInfo.CreateSpecificCulture("lv-LV")));
    // Displays (8) Aug, augusts
    
    Dim date1 As Date = #8/18/2008#
    Console.WriteLine(date1.ToString("(M) MMM, MMMM", _
                      CultureInfo.CreateSpecificCulture("en-US")))
    ' Displays (8) Aug, August
    Console.WriteLine(date1.ToString("(M) MMM, MMMM", _
                      CultureInfo.CreateSpecificCulture("nl-NL")))
    ' Displays (8) aug, augustus
    Console.WriteLine(date1.ToString("(M) MMM, MMMM", _
                      CultureInfo.CreateSpecificCulture("lv-LV")))
    ' Displays (8) Aug, augusts                       
    

    "MM" 自訂格式規範

    "MM" 自訂格式規範以 01 到 12 的數字來表示月份 (如果是有 13 個月的行事曆則從 1 到 13)。 單一位數的月份會格式化為有前置零的數字。

    下列範例會在自訂格式字串中加入 "MM" 自訂格式規範。

    DateTime date1 = new DateTime(2008, 1, 2, 6, 30, 15);
    Console.WriteLine(date1.ToString("dd, MM",
                      CultureInfo.InvariantCulture));
    // 02, 01
    
    Dim date1 As Date = #1/2/2008 6:30:15AM#
    Console.WriteLine(date1.ToString("dd, MM", _
                      CultureInfo.InvariantCulture))
    ' 02, 01
    

    "MMM" 自訂格式規範

    "MMM" 自訂格式規範表示月份的縮寫名稱。 月份的當地語系化縮寫名稱是擷取自目前或指定之文化特性的 DateTimeFormatInfo.AbbreviatedMonthNames 屬性。

    下列範例會在自訂格式字串中加入 "MMM" 自訂格式規範。

    DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15);
    Console.WriteLine(date1.ToString("ddd d MMM",
                      CultureInfo.CreateSpecificCulture("en-US")));
    // Displays Fri 29 Aug
    Console.WriteLine(date1.ToString("ddd d MMM",
                      CultureInfo.CreateSpecificCulture("fr-FR")));
    // Displays ven. 29 août
    
    Dim date1 As Date = #08/29/2008 7:27:15PM#
    Console.WriteLine(date1.ToString("ddd d MMM", _
                      CultureInfo.CreateSpecificCulture("en-US")))
    ' Displays Fri 29 Aug
    Console.WriteLine(date1.ToString("ddd d MMM", _
                      CultureInfo.CreateSpecificCulture("fr-FR")))
    ' Displays ven. 29 août                                                
    

    "MMMM" 自訂格式規範

    "MMMM" 自訂格式規範表示月份的完整名稱。 月份的當地語系化名稱是擷取自目前或指定之文化特性的 DateTimeFormatInfo.MonthNames 屬性。

    下列範例會在自訂格式字串中加入 "MMMM" 自訂格式規範。

    DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15);
    Console.WriteLine(date1.ToString("dddd dd MMMM",
                      CultureInfo.CreateSpecificCulture("en-US")));
    // Displays Friday 29 August
    Console.WriteLine(date1.ToString("dddd dd MMMM",
                      CultureInfo.CreateSpecificCulture("it-IT")));
    // Displays venerdì 29 agosto
    
    Dim date1 As Date = #08/29/2008 7:27:15PM#
    Console.WriteLine(date1.ToString("dddd dd MMMM", _
                      CultureInfo.CreateSpecificCulture("en-US")))
    ' Displays Friday 29 August
    Console.WriteLine(date1.ToString("dddd dd MMMM", _
                      CultureInfo.CreateSpecificCulture("it-IT")))
    ' Displays venerdì 29 agosto                                          
    

    秒 「s」 格式規範

    "s" 自訂格式規範

    "s" 自訂格式規範以 0 到 59 的數字來表示秒數。 結果表示自上個分鐘以來已經過的完整秒數。 單一位數的秒數會格式化為沒有前置零的數字。

    如果單獨使用 "s" 格式規範,而沒有其他自訂格式規範,則會將它解譯為 "s" 標準日期和時間格式規範。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

    下列範例會在自訂格式字串中加入 "s" 自訂格式規範。

    DateTime date1;
    date1 = new DateTime(2008, 1, 1, 18, 9, 1);
    Console.WriteLine(date1.ToString("h:m:s.F t",
                      CultureInfo.InvariantCulture));
    // Displays 6:9:1 P
    Console.WriteLine(date1.ToString("h:m:s.F t",
                      CultureInfo.CreateSpecificCulture("el-GR")));
    // Displays 6:9:1 µ
    date1 = new DateTime(2008, 1, 1, 18, 9, 1, 500);
    Console.WriteLine(date1.ToString("h:m:s.F t",
                      CultureInfo.InvariantCulture));
    // Displays 6:9:1.5 P
    Console.WriteLine(date1.ToString("h:m:s.F t",
                      CultureInfo.CreateSpecificCulture("el-GR")));
    // Displays 6:9:1.5 µ
    
    Dim date1 As Date
    date1 = #6:09:01PM#
    Console.WriteLine(date1.ToString("h:m:s.F t", _
                      CultureInfo.InvariantCulture))
    ' Displays 6:9:1 P
    Console.WriteLine(date1.ToString("h:m:s.F t", _
                      CultureInfo.CreateSpecificCulture("el-GR")))
    ' Displays 6:9:1 µ                        
    date1 = New Date(2008, 1, 1, 18, 9, 1, 500)
    Console.WriteLine(date1.ToString("h:m:s.F t", _
                      CultureInfo.InvariantCulture))
    ' Displays 6:9:1.5 P
    Console.WriteLine(date1.ToString("h:m:s.F t", _
                      CultureInfo.CreateSpecificCulture("el-GR")))
    ' Displays 6:9:1.5 µ
    

    "ss" 自訂格式規範

    "ss" 自訂格式規範 (加上任意個額外的 "s" 規範) 以 00 到 59 的數字來表示秒數。 結果表示自上個分鐘以來已經過的完整秒數。 單一位數的秒數會格式化為具有前置零的數字。

    下列範例會在自訂格式字串中加入 "ss" 自訂格式規範。

    DateTime date1;
    date1 = new DateTime(2008, 1, 1, 18, 9, 1);
    Console.WriteLine(date1.ToString("hh:mm:ss tt",
                      CultureInfo.InvariantCulture));
    // Displays 06:09:01 PM
    Console.WriteLine(date1.ToString("hh:mm:ss tt",
                      CultureInfo.CreateSpecificCulture("hu-HU")));
    // Displays 06:09:01 du.
    date1 = new DateTime(2008, 1, 1, 18, 9, 1, 500);
    Console.WriteLine(date1.ToString("hh:mm:ss.ff tt",
                      CultureInfo.InvariantCulture));
    // Displays 06:09:01.50 PM
    Console.WriteLine(date1.ToString("hh:mm:ss.ff tt",
                      CultureInfo.CreateSpecificCulture("hu-HU")));
    // Displays 06:09:01.50 du.
    
    Dim date1 As Date
    date1 = #6:09:01PM#
    Console.WriteLine(date1.ToString("hh:mm:ss tt", _
                      CultureInfo.InvariantCulture))
    ' Displays 06:09:01 PM                        
    Console.WriteLine(date1.ToString("hh:mm:ss tt", _
                      CultureInfo.CreateSpecificCulture("hu-HU")))
    ' Displays 06:09:01 du.
    date1 = New Date(2008, 1, 1, 18, 9, 1, 500)
    Console.WriteLine(date1.ToString("hh:mm:ss.ff tt", _
                      CultureInfo.InvariantCulture))
    ' Displays 06:09:01.50 PM                        
    Console.WriteLine(date1.ToString("hh:mm:ss.ff tt", _
                      CultureInfo.CreateSpecificCulture("hu-HU")))
    ' Displays 06:09:01.50 du.
    

    Meridiem 「t」 格式規範

    "t" 自訂格式規範

    "t" 自訂格式規範表示 AM/PM 指示項的第一個字元。 適當的當地語系化指示項是擷取自目前或特定文化特性的 DateTimeFormatInfo.AMDesignatorDateTimeFormatInfo.PMDesignator 屬性。 AM 指示項用於從 0:00:00 (午夜) 到 11:59:59.999 為止的所有時間。 PM 指示項用於從 12:00:00 (中午) 到 23:59:59.999 為止的所有時間。

    如果單獨使用 "t" 格式規範,而沒有其他自訂格式規範,則會將它解譯為 "t" 標準日期和時間格式規範。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

    下列範例會在自訂格式字串中加入 "t" 自訂格式規範。

    DateTime date1;
    date1 = new DateTime(2008, 1, 1, 18, 9, 1);
    Console.WriteLine(date1.ToString("h:m:s.F t",
                      CultureInfo.InvariantCulture));
    // Displays 6:9:1 P
    Console.WriteLine(date1.ToString("h:m:s.F t",
                      CultureInfo.CreateSpecificCulture("el-GR")));
    // Displays 6:9:1 µ
    date1 = new DateTime(2008, 1, 1, 18, 9, 1, 500);
    Console.WriteLine(date1.ToString("h:m:s.F t",
                      CultureInfo.InvariantCulture));
    // Displays 6:9:1.5 P
    Console.WriteLine(date1.ToString("h:m:s.F t",
                      CultureInfo.CreateSpecificCulture("el-GR")));
    // Displays 6:9:1.5 µ
    
    Dim date1 As Date
    date1 = #6:09:01PM#
    Console.WriteLine(date1.ToString("h:m:s.F t", _
                      CultureInfo.InvariantCulture))
    ' Displays 6:9:1 P
    Console.WriteLine(date1.ToString("h:m:s.F t", _
                      CultureInfo.CreateSpecificCulture("el-GR")))
    ' Displays 6:9:1 µ                        
    date1 = New Date(2008, 1, 1, 18, 9, 1, 500)
    Console.WriteLine(date1.ToString("h:m:s.F t", _
                      CultureInfo.InvariantCulture))
    ' Displays 6:9:1.5 P
    Console.WriteLine(date1.ToString("h:m:s.F t", _
                      CultureInfo.CreateSpecificCulture("el-GR")))
    ' Displays 6:9:1.5 µ
    

    "tt" 自訂格式規範

    "tt" 自訂格式規範 (加上任意個額外的 "t" 規範) 表示整個 AM/PM 指示項。 適當的當地語系化指示項是擷取自目前或特定文化特性的 DateTimeFormatInfo.AMDesignatorDateTimeFormatInfo.PMDesignator 屬性。 AM 指示項用於從 0:00:00 (午夜) 到 11:59:59.999 為止的所有時間。 PM 指示項用於從 12:00:00 (中午) 到 23:59:59.999 為止的所有時間。

    對於需要特別強調 AM 與 PM 的語言,請務必使用 "tt" 規範。 其中一種就是日文,日文的 AM 和 PM 指示項的第二個字元 (非第一個字元) 不同。

    下列範例會在自訂格式字串中加入 "tt" 自訂格式規範。

    DateTime date1;
    date1 = new DateTime(2008, 1, 1, 18, 9, 1);
    Console.WriteLine(date1.ToString("hh:mm:ss tt",
                      CultureInfo.InvariantCulture));
    // Displays 06:09:01 PM
    Console.WriteLine(date1.ToString("hh:mm:ss tt",
                      CultureInfo.CreateSpecificCulture("hu-HU")));
    // Displays 06:09:01 du.
    date1 = new DateTime(2008, 1, 1, 18, 9, 1, 500);
    Console.WriteLine(date1.ToString("hh:mm:ss.ff tt",
                      CultureInfo.InvariantCulture));
    // Displays 06:09:01.50 PM
    Console.WriteLine(date1.ToString("hh:mm:ss.ff tt",
                      CultureInfo.CreateSpecificCulture("hu-HU")));
    // Displays 06:09:01.50 du.
    
    Dim date1 As Date
    date1 = #6:09:01PM#
    Console.WriteLine(date1.ToString("hh:mm:ss tt", _
                      CultureInfo.InvariantCulture))
    ' Displays 06:09:01 PM                        
    Console.WriteLine(date1.ToString("hh:mm:ss tt", _
                      CultureInfo.CreateSpecificCulture("hu-HU")))
    ' Displays 06:09:01 du.
    date1 = New Date(2008, 1, 1, 18, 9, 1, 500)
    Console.WriteLine(date1.ToString("hh:mm:ss.ff tt", _
                      CultureInfo.InvariantCulture))
    ' Displays 06:09:01.50 PM                        
    Console.WriteLine(date1.ToString("hh:mm:ss.ff tt", _
                      CultureInfo.CreateSpecificCulture("hu-HU")))
    ' Displays 06:09:01.50 du.
    

    年份 「y」 格式規範

    "y" 自訂格式規範

    "y" 自訂格式規範以一位或兩位數來表示年份。 如果年份超過兩個位數,結果中只會出現兩個低位數字。 如果兩位數年份的第一個數字以零開始 (例如 2008),則會格式化為沒有前置零的數字。

    如果單獨使用 "y" 格式規範,而沒有其他自訂格式規範,則會將它解譯為 "y" 標準日期和時間格式規範。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

    下列範例會在自訂格式字串中加入 "y" 自訂格式規範。

    DateTime date1 = new DateTime(1, 12, 1);
    DateTime date2 = new DateTime(2010, 1, 1);
    Console.WriteLine(date1.ToString("%y"));
    // Displays 1
    Console.WriteLine(date1.ToString("yy"));
    // Displays 01
    Console.WriteLine(date1.ToString("yyy"));
    // Displays 001
    Console.WriteLine(date1.ToString("yyyy"));
    // Displays 0001
    Console.WriteLine(date1.ToString("yyyyy"));
    // Displays 00001
    Console.WriteLine(date2.ToString("%y"));
    // Displays 10
    Console.WriteLine(date2.ToString("yy"));
    // Displays 10
    Console.WriteLine(date2.ToString("yyy"));
    // Displays 2010
    Console.WriteLine(date2.ToString("yyyy"));
    // Displays 2010
    Console.WriteLine(date2.ToString("yyyyy"));
    // Displays 02010
    
    Dim date1 As Date = #12/1/0001#
    Dim date2 As Date = #1/1/2010#
    Console.WriteLine(date1.ToString("%y"))
    ' Displays 1
    Console.WriteLine(date1.ToString("yy"))
    ' Displays 01
    Console.WriteLine(date1.ToString("yyy"))
    ' Displays 001
    Console.WriteLine(date1.ToString("yyyy"))
    ' Displays 0001
    Console.WriteLine(date1.ToString("yyyyy"))
    ' Displays 00001
    Console.WriteLine(date2.ToString("%y"))
    ' Displays 10
    Console.WriteLine(date2.ToString("yy"))
    ' Displays 10
    Console.WriteLine(date2.ToString("yyy"))
    ' Displays 2010      
    Console.WriteLine(date2.ToString("yyyy"))
    ' Displays 2010      
    Console.WriteLine(date2.ToString("yyyyy"))
    ' Displays 02010      
    

    "yy" 自訂格式規範

    "yy" 自訂格式規範以兩位數來表示年份。 如果年份超過兩個位數,結果中只會出現兩個低位數字。 如果兩位數年份少於兩個有效位數,則會以前置零填補此數字來產生兩位數。

    在剖析作業中,使用 "yy" 自訂格式規範所剖析的兩位數年份,是根據格式提供者現行曆法的 Calendar.TwoDigitYearMax 屬性進行解譯。 下列範例會使用 en-US 文化特性的預設西曆 (在此案例中為目前的文化特性),剖析具有兩位數年份之日期的字串表示。 接著它會將目前文化特性的 CultureInfo 物件變更為使用已修改 GregorianCalendar 屬性的 TwoDigitYearMax 物件。

    using System;
    using System.Globalization;
    using System.Threading;
    public class Example7
        public static void Main()
            string fmt = "dd-MMM-yy";
            string value = "24-Jan-49";
            Calendar cal = (Calendar)CultureInfo.CurrentCulture.Calendar.Clone();
            Console.WriteLine("Two Digit Year Range: {0} - {1}",
                              cal.TwoDigitYearMax - 99, cal.TwoDigitYearMax);
            Console.WriteLine("{0:d}", DateTime.ParseExact(value, fmt, null));
            Console.WriteLine();
            cal.TwoDigitYearMax = 2099;
            CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
            culture.DateTimeFormat.Calendar = cal;
            Thread.CurrentThread.CurrentCulture = culture;
            Console.WriteLine("Two Digit Year Range: {0} - {1}",
                              cal.TwoDigitYearMax - 99, cal.TwoDigitYearMax);
            Console.WriteLine("{0:d}", DateTime.ParseExact(value, fmt, null));
    // The example displays the following output:
    //       Two Digit Year Range: 1930 - 2029
    //       1/24/1949
    //       Two Digit Year Range: 2000 - 2099
    //       1/24/2049
    
    Imports System.Globalization
    Imports System.Threading
    Module Example
        Public Sub Main()
            Dim fmt As String = "dd-MMM-yy"
            Dim value As String = "24-Jan-49"
            Dim cal As Calendar = CType(CultureInfo.CurrentCulture.Calendar.Clone(), Calendar)
            Console.WriteLine("Two Digit Year Range: {0} - {1}",
                              cal.TwoDigitYearMax - 99, cal.TwoDigitYearMax)
            Console.WriteLine("{0:d}", DateTime.ParseExact(value, fmt, Nothing))
            Console.WriteLine()
            cal.TwoDigitYearMax = 2099
            Dim culture As CultureInfo = CType(CultureInfo.CurrentCulture.Clone(), CultureInfo)
            culture.DateTimeFormat.Calendar = cal
            Thread.CurrentThread.CurrentCulture = culture
            Console.WriteLine("Two Digit Year Range: {0} - {1}",
                              cal.TwoDigitYearMax - 99, cal.TwoDigitYearMax)
            Console.WriteLine("{0:d}", DateTime.ParseExact(value, fmt, Nothing))
        End Sub
    End Module
    ' The example displays the following output:
    '       Two Digit Year Range: 1930 - 2029
    '       1/24/1949
    '       Two Digit Year Range: 2000 - 2099
    '       1/24/2049
    

    下列範例會在自訂格式字串中加入 "yy" 自訂格式規範。

    DateTime date1 = new DateTime(1, 12, 1);
    DateTime date2 = new DateTime(2010, 1, 1);
    Console.WriteLine(date1.ToString("%y"));
    // Displays 1
    Console.WriteLine(date1.ToString("yy"));
    // Displays 01
    Console.WriteLine(date1.ToString("yyy"));
    // Displays 001
    Console.WriteLine(date1.ToString("yyyy"));
    // Displays 0001
    Console.WriteLine(date1.ToString("yyyyy"));
    // Displays 00001
    Console.WriteLine(date2.ToString("%y"));
    // Displays 10
    Console.WriteLine(date2.ToString("yy"));
    // Displays 10
    Console.WriteLine(date2.ToString("yyy"));
    // Displays 2010
    Console.WriteLine(date2.ToString("yyyy"));
    // Displays 2010
    Console.WriteLine(date2.ToString("yyyyy"));
    // Displays 02010
    
    Dim date1 As Date = #12/1/0001#
    Dim date2 As Date = #1/1/2010#
    Console.WriteLine(date1.ToString("%y"))
    ' Displays 1
    Console.WriteLine(date1.ToString("yy"))
    ' Displays 01
    Console.WriteLine(date1.ToString("yyy"))
    ' Displays 001
    Console.WriteLine(date1.ToString("yyyy"))
    ' Displays 0001
    Console.WriteLine(date1.ToString("yyyyy"))
    ' Displays 00001
    Console.WriteLine(date2.ToString("%y"))
    ' Displays 10
    Console.WriteLine(date2.ToString("yy"))
    ' Displays 10
    Console.WriteLine(date2.ToString("yyy"))
    ' Displays 2010      
    Console.WriteLine(date2.ToString("yyyy"))
    ' Displays 2010      
    Console.WriteLine(date2.ToString("yyyyy"))
    ' Displays 02010      
    

    "yyy" 自訂格式規範

    "yyy" 自訂格式規範以最少三位數來表示年份。 如果年份超過三個有效位數,它們會包含在結果字串中。 如果年份少於三個位數,則會以前置零填補此數字來產生三位數。

    對於可具有五位數年份的泰國佛教曆法,此格式規範會顯示全部有效位數。

    下列範例會在自訂格式字串中加入 "yyy" 自訂格式規範。

    DateTime date1 = new DateTime(1, 12, 1);
    DateTime date2 = new DateTime(2010, 1, 1);
    Console.WriteLine(date1.ToString("%y"));
    // Displays 1
    Console.WriteLine(date1.ToString("yy"));
    // Displays 01
    Console.WriteLine(date1.ToString("yyy"));
    // Displays 001
    Console.WriteLine(date1.ToString("yyyy"));
    // Displays 0001
    Console.WriteLine(date1.ToString("yyyyy"));
    // Displays 00001
    Console.WriteLine(date2.ToString("%y"));
    // Displays 10
    Console.WriteLine(date2.ToString("yy"));
    // Displays 10
    Console.WriteLine(date2.ToString("yyy"));
    // Displays 2010
    Console.WriteLine(date2.ToString("yyyy"));
    // Displays 2010
    Console.WriteLine(date2.ToString("yyyyy"));
    // Displays 02010
    
    Dim date1 As Date = #12/1/0001#
    Dim date2 As Date = #1/1/2010#
    Console.WriteLine(date1.ToString("%y"))
    ' Displays 1
    Console.WriteLine(date1.ToString("yy"))
    ' Displays 01
    Console.WriteLine(date1.ToString("yyy"))
    ' Displays 001
    Console.WriteLine(date1.ToString("yyyy"))
    ' Displays 0001
    Console.WriteLine(date1.ToString("yyyyy"))
    ' Displays 00001
    Console.WriteLine(date2.ToString("%y"))
    ' Displays 10
    Console.WriteLine(date2.ToString("yy"))
    ' Displays 10
    Console.WriteLine(date2.ToString("yyy"))
    ' Displays 2010      
    Console.WriteLine(date2.ToString("yyyy"))
    ' Displays 2010      
    Console.WriteLine(date2.ToString("yyyyy"))
    ' Displays 02010      
    

    "yyyy" 自訂格式規範

    "yyyy" 自訂格式規範以最少四位數來表示年份。 如果年份超過四個有效位數,它們會包含在結果字串中。 如果年份少於四個位數,則會以前置零填補此數字,以產生四個位數。

    對於可具有五位數年份的泰國佛教曆法,此格式規範會顯示最少四個位數。

    下列範例會在自訂格式字串中加入 "yyyy" 自訂格式規範。

    DateTime date1 = new DateTime(1, 12, 1);
    DateTime date2 = new DateTime(2010, 1, 1);
    Console.WriteLine(date1.ToString("%y"));
    // Displays 1
    Console.WriteLine(date1.ToString("yy"));
    // Displays 01
    Console.WriteLine(date1.ToString("yyy"));
    // Displays 001
    Console.WriteLine(date1.ToString("yyyy"));
    // Displays 0001
    Console.WriteLine(date1.ToString("yyyyy"));
    // Displays 00001
    Console.WriteLine(date2.ToString("%y"));
    // Displays 10
    Console.WriteLine(date2.ToString("yy"));
    // Displays 10
    Console.WriteLine(date2.ToString("yyy"));
    // Displays 2010
    Console.WriteLine(date2.ToString("yyyy"));
    // Displays 2010
    Console.WriteLine(date2.ToString("yyyyy"));
    // Displays 02010
    
    Dim date1 As Date = #12/1/0001#
    Dim date2 As Date = #1/1/2010#
    Console.WriteLine(date1.ToString("%y"))
    ' Displays 1
    Console.WriteLine(date1.ToString("yy"))
    ' Displays 01
    Console.WriteLine(date1.ToString("yyy"))
    ' Displays 001
    Console.WriteLine(date1.ToString("yyyy"))
    ' Displays 0001
    Console.WriteLine(date1.ToString("yyyyy"))
    ' Displays 00001
    Console.WriteLine(date2.ToString("%y"))
    ' Displays 10
    Console.WriteLine(date2.ToString("yy"))
    ' Displays 10
    Console.WriteLine(date2.ToString("yyy"))
    ' Displays 2010      
    Console.WriteLine(date2.ToString("yyyy"))
    ' Displays 2010      
    Console.WriteLine(date2.ToString("yyyyy"))
    ' Displays 02010      
    

    "yyyyy" 自訂格式規範

    "yyyyy" 自訂格式規範 (加上任意個額外的 "y" 規範) 以最少五位數來表示年份。 如果年份超過五個有效位數,它們會包含在結果字串中。 如果年份少於五位數,則會以前置零填補此數字來產生五位數。

    如果有更多 "y" 規範,則會視需要以前置零填補此數字,以產生該 "y" 規範數目的位數。

    下列範例會在自訂格式字串中加入 "yyyyy" 自訂格式規範。

    DateTime date1 = new DateTime(1, 12, 1);
    DateTime date2 = new DateTime(2010, 1, 1);
    Console.WriteLine(date1.ToString("%y"));
    // Displays 1
    Console.WriteLine(date1.ToString("yy"));
    // Displays 01
    Console.WriteLine(date1.ToString("yyy"));
    // Displays 001
    Console.WriteLine(date1.ToString("yyyy"));
    // Displays 0001
    Console.WriteLine(date1.ToString("yyyyy"));
    // Displays 00001
    Console.WriteLine(date2.ToString("%y"));
    // Displays 10
    Console.WriteLine(date2.ToString("yy"));
    // Displays 10
    Console.WriteLine(date2.ToString("yyy"));
    // Displays 2010
    Console.WriteLine(date2.ToString("yyyy"));
    // Displays 2010
    Console.WriteLine(date2.ToString("yyyyy"));
    // Displays 02010
    
    Dim date1 As Date = #12/1/0001#
    Dim date2 As Date = #1/1/2010#
    Console.WriteLine(date1.ToString("%y"))
    ' Displays 1
    Console.WriteLine(date1.ToString("yy"))
    ' Displays 01
    Console.WriteLine(date1.ToString("yyy"))
    ' Displays 001
    Console.WriteLine(date1.ToString("yyyy"))
    ' Displays 0001
    Console.WriteLine(date1.ToString("yyyyy"))
    ' Displays 00001
    Console.WriteLine(date2.ToString("%y"))
    ' Displays 10
    Console.WriteLine(date2.ToString("yy"))
    ' Displays 10
    Console.WriteLine(date2.ToString("yyy"))
    ' Displays 2010      
    Console.WriteLine(date2.ToString("yyyy"))
    ' Displays 2010      
    Console.WriteLine(date2.ToString("yyyyy"))
    ' Displays 02010      
    

    位移 「z」 格式規範

    "z" 自訂格式規範

    使用 DateTime 值時,「z」 自訂格式規範代表從國際標準時間 (UTC) 指定時區的帶正負號位移,以小時為單位。 顯示時差時,一定會有前置正負號。 加號 (+) 表示早於 UTC 的時數,減號 (-) 表示晚於 UTC 的時數。 單一位數位移的格式 沒有 前置零。

    下表顯示位移值如何根據 DateTimeKind 變更。

    DateTimeKind

    搭配 DateTimeOffset 值使用時,此格式規範表示 DateTimeOffset 值與 UTC 之間的時差,以小時為單位。

    如果單獨使用 "z" 格式規範,而沒有其他自訂格式規範,則會將它解譯為標準日期和時間格式規範,並擲回 FormatException。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

    下列範例會在自訂格式字串中加入 "z" 自訂格式規範。

    DateTime date1 = DateTime.UtcNow;
    Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}",
                      date1));
    // Displays -7, -07, -07:00 on .NET Framework
    // Displays +0, +00, +00:00 on .NET Core and .NET 5+
    DateTimeOffset date2 = new DateTimeOffset(2008, 8, 1, 0, 0, 0,
                                              new TimeSpan(6, 0, 0));
    Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}",
                      date2));
    // Displays +6, +06, +06:00
    
    Dim date1 As Date = Date.UtcNow
    Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}", _
                      date1))
    ' Displays -7, -07, -07:00 on .NET Framework
    ' Displays +0, +00, +00:00 on .NET Core and .NET 5+
    Dim date2 As New DateTimeOffset(2008, 8, 1, 0, 0, 0, _
                                    New Timespan(6, 0, 0))
    Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}", _
                      date2))
    ' Displays +6, +06, +06:00
    

    "zz" 自訂格式規範

    使用 DateTime 值時,「zz」 自訂格式規範代表指定時區從 UTC 帶正負號的位移,以小時為單位。 顯示時差時,一定會有前置正負號。 加號 (+) 表示早於 UTC 的時數,減號 (-) 表示晚於 UTC 的時數。 單一位數位移會 格式化 為前置零。

    下表顯示位移值如何根據 DateTimeKind 變更。

    DateTimeKind

    搭配 DateTimeOffset 值使用時,此格式規範表示 DateTimeOffset 值與 UTC 之間的時差,以小時為單位。

    下列範例會在自訂格式字串中加入 "zz" 自訂格式規範。

    DateTime date1 = DateTime.UtcNow;
    Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}",
                      date1));
    // Displays -7, -07, -07:00 on .NET Framework
    // Displays +0, +00, +00:00 on .NET Core and .NET 5+
    DateTimeOffset date2 = new DateTimeOffset(2008, 8, 1, 0, 0, 0,
                                              new TimeSpan(6, 0, 0));
    Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}",
                      date2));
    // Displays +6, +06, +06:00
    
    Dim date1 As Date = Date.UtcNow
    Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}", _
                      date1))
    ' Displays -7, -07, -07:00 on .NET Framework
    ' Displays +0, +00, +00:00 on .NET Core and .NET 5+
    Dim date2 As New DateTimeOffset(2008, 8, 1, 0, 0, 0, _
                                    New Timespan(6, 0, 0))
    Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}", _
                      date2))
    ' Displays +6, +06, +06:00
    

    "zzz" 自訂格式規範

    使用 DateTime 值時,「zzz」 自訂格式規範代表從 UTC 指定時區的帶正負號位移,以小時和分鐘為單位。 顯示時差時,一定會有前置正負號。 加號 (+) 表示早於 UTC 的時數,減號 (-) 表示晚於 UTC 的時數。 單一位數的時差會格式化為有前置零的數字。

    下表顯示位移值如何根據 DateTimeKind 變更。

    DateTimeKind

    搭配 DateTimeOffset 值使用時,此格式規範表示 DateTimeOffset 值與 UTC 之間的時差,以小時和分鐘為單位。

    下列範例會在自訂格式字串中加入 "zzz" 自訂格式規範。

    DateTime date1 = DateTime.UtcNow;
    Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}",
                      date1));
    // Displays -7, -07, -07:00 on .NET Framework
    // Displays +0, +00, +00:00 on .NET Core and .NET 5+
    DateTimeOffset date2 = new DateTimeOffset(2008, 8, 1, 0, 0, 0,
                                              new TimeSpan(6, 0, 0));
    Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}",
                      date2));
    // Displays +6, +06, +06:00
    
    Dim date1 As Date = Date.UtcNow
    Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}", _
                      date1))
    ' Displays -7, -07, -07:00 on .NET Framework
    ' Displays +0, +00, +00:00 on .NET Core and .NET 5+
    Dim date2 As New DateTimeOffset(2008, 8, 1, 0, 0, 0, _
                                    New Timespan(6, 0, 0))
    Console.WriteLine(String.Format("{0:%z}, {0:zz}, {0:zzz}", _
                      date2))
    ' Displays +6, +06, +06:00
    

    日期和時間分隔符號規範

    ":" 自訂格式規範

    ":" 自訂格式規範表示時間分隔符號,用於區別時、分、秒。 適當的當地語系化時間分隔符號是擷取自目前或指定之文化特性的 DateTimeFormatInfo.TimeSeparator 屬性。

    若要變更特定日期和時間字串的時間分隔符號,請在常值字串分隔符號內指定分隔字元。 例如,自訂格式字串 hh'_'dd'_'ss 產生的結果字串中,一律使用 "_" (底線) 作為時間分隔符號。 若要變更文化特性所有日期的時間分隔符號,請變更目前文化特性的 DateTimeFormatInfo.TimeSeparator 屬性值,或是具現化 DateTimeFormatInfo 物件、將字元指派給它的 TimeSeparator 屬性,並呼叫包含 IFormatProvider 參數的格式化方法之多載。

    如果單獨使用 ":" 格式規範,而沒有其他自訂格式規範,則會將它解譯為標準日期和時間格式規範,並擲回 FormatException。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

    "/" 自訂格式規範

    "/" 自訂格式規範表示日期分隔符號,用於區別年、月、日。 適當的當地語系化日期分隔符號是擷取自目前或指定之文化特性的 DateTimeFormatInfo.DateSeparator 屬性。

    若要變更特定日期和時間字串的日期分隔符號,請在常值字串分隔符號內指定分隔字元。 例如,自訂格式字串 mm'/'dd'/'yyyy 產生的結果字串中,一律使用 "/" 作為日期分隔符號。 若要變更文化特性的所有日期之日期分隔符號,請變更目前文化特性的 DateTimeFormatInfo.DateSeparator 屬性值,或是具現化 DateTimeFormatInfo 物件、將字元指派給它的 DateSeparator 屬性,並呼叫包含 IFormatProvider 參數的格式化方法之多載。

    如果單獨使用 "/" 格式規範,而沒有其他自訂格式規範,則會將它解譯為標準日期和時間格式規範,並擲回 FormatException。 如需如何使用單一格式規範的詳細資訊,請參閱本文稍後的使用單一自訂格式規範

    自訂日期和時間格式字串中的下列字元會保留下來,而且一律會解譯為格式化字元,或 、、 /\ 的情況 "' 為特殊字元。

    所有其他字元一律會解譯為字元常值,並在格式化作業中,原封不動地包含在結果字串中。 在剖析作業中,它們必須完全符合輸入字串中的字元;這項比較會區分大小寫。

    下列範例包含常值字元 "PST" (太平洋標準時間) 和 "PDT" (太平洋日光節約時間),以表示格式字串中的當地時區。 請注意,此字串會包含在結果字串中,而且包含當地時區字串的字串也會成功剖析。

    using System;
    using System.Globalization;
    public class Example5
        public static void Main()
            String[] formats = { "dd MMM yyyy hh:mm tt PST",
                               "dd MMM yyyy hh:mm tt PDT" };
            var dat = new DateTime(2016, 8, 18, 16, 50, 0);
            // Display the result string.
            Console.WriteLine(dat.ToString(formats[1]));
            // Parse a string.
            String value = "25 Dec 2016 12:00 pm PST";
            DateTime newDate;
            if (DateTime.TryParseExact(value, formats, null,
                                       DateTimeStyles.None, out newDate))
                Console.WriteLine(newDate);
                Console.WriteLine("Unable to parse '{0}'", value);
    // The example displays the following output:
    //       18 Aug 2016 04:50 PM PDT
    //       12/25/2016 12:00:00 PM
    
    Imports System.Globalization
    Module Example
        Public Sub Main()
            Dim formats() As String = {"dd MMM yyyy hh:mm tt PST",
                                        "dd MMM yyyy hh:mm tt PDT"}
            Dim dat As New Date(2016, 8, 18, 16, 50, 0)
            ' Display the result string. 
            Console.WriteLine(dat.ToString(formats(1)))
            ' Parse a string. 
            Dim value As String = "25 Dec 2016 12:00 pm PST"
            Dim newDate As Date
            If Date.TryParseExact(value, formats, Nothing,
                                  DateTimeStyles.None, newDate) Then
                Console.WriteLine(newDate)
                Console.WriteLine("Unable to parse '{0}'", value)
            End If
        End Sub
    End Module
    ' The example displays the following output:
    '       18 Aug 2016 04:50 PM PDT
    '       12/25/2016 12:00:00 PM
    

    您可以使用兩種方式來指定將字元解譯為常值字元,而不是保留字元,以便包含在結果字串中,或在輸入字串中成功剖析:

  • 將每個保留字元逸出。 如需詳細資訊,請參閱 使用逸出字元
  • 下列範例包含常值字元 "pst" (太平洋標準時間),以表示格式字串中的當地時區。 由於 "s" 與 "t" 是自訂格式字串,因此必須逸出這兩個字元才能解譯為字元常值。

    using System;
    using System.Globalization;
    public class Example3
        public static void Main()
            String format = "dd MMM yyyy hh:mm tt p\\s\\t";
            var dat = new DateTime(2016, 8, 18, 16, 50, 0);
            // Display the result string.
            Console.WriteLine(dat.ToString(format));
            // Parse a string.
            String value = "25 Dec 2016 12:00 pm pst";
            DateTime newDate;
            if (DateTime.TryParseExact(value, format, null,
                                       DateTimeStyles.None, out newDate))
                Console.WriteLine(newDate);
                Console.WriteLine("Unable to parse '{0}'", value);
    // The example displays the following output:
    //       18 Aug 2016 04:50 PM pst
    //       12/25/2016 12:00:00 PM
    
    Imports System.Globalization
    Module Example
        Public Sub Main()
            Dim fmt As String = "dd MMM yyyy hh:mm tt p\s\t"
            Dim dat As New Date(2016, 8, 18, 16, 50, 0)
            ' Display the result string. 
            Console.WriteLine(dat.ToString(fmt))
            ' Parse a string. 
            Dim value As String = "25 Dec 2016 12:00 pm pst"
            Dim newDate As Date
            If Date.TryParseExact(value, fmt, Nothing,
                                  DateTimeStyles.None, newDate) Then
                Console.WriteLine(newDate)
                Console.WriteLine("Unable to parse '{0}'", value)
            End If
        End Sub
    End Module
    ' The example displays the following output:
    '       18 Aug 2016 04:50 PM pst
    '       12/25/2016 12:00:00 PM
    
  • 以雙引號或單引號括住整個常值字串。 下列範例類似上一個範例,不同之處在於 "pst" 會以雙引號括住,以表示整個分隔的字串都應該解譯為字元常值。
  • using System;
    using System.Globalization;
    public class Example6
        public static void Main()
            String format = "dd MMM yyyy hh:mm tt \"pst\"";
            var dat = new DateTime(2016, 8, 18, 16, 50, 0);
            // Display the result string.
            Console.WriteLine(dat.ToString(format));
            // Parse a string.
            String value = "25 Dec 2016 12:00 pm pst";
            DateTime newDate;
            if (DateTime.TryParseExact(value, format, null,
                                       DateTimeStyles.None, out newDate))
                Console.WriteLine(newDate);
                Console.WriteLine("Unable to parse '{0}'", value);
    // The example displays the following output:
    //       18 Aug 2016 04:50 PM pst
    //       12/25/2016 12:00:00 PM
    
    Imports System.Globalization
    Module Example
        Public Sub Main()
            Dim fmt As String = "dd MMM yyyy hh:mm tt ""pst"""
            Dim dat As New Date(2016, 8, 18, 16, 50, 0)
            ' Display the result string. 
            Console.WriteLine(dat.ToString(fmt))
            ' Parse a string. 
            Dim value As String = "25 Dec 2016 12:00 pm pst"
            Dim newDate As Date
            If Date.TryParseExact(value, fmt, Nothing,
                                  DateTimeStyles.None, newDate) Then
                Console.WriteLine(newDate)
                Console.WriteLine("Unable to parse '{0}'", value)
            End If
        End Sub
    End Module
    ' The example displays the following output:
    '       18 Aug 2016 04:50 PM pst
    '       12/25/2016 12:00:00 PM
    

    使用單一自訂格式規範

    自訂日期和時間格式字串是由兩個或多個字元所組成。 日期和時間格式化方法會將任何單一字元字串解譯為標準日期和時間格式字串。 如果這些方法無法將該字元辨認為有效的格式規範,則會擲回 FormatException。 例如,僅由規範 "h" 所組成的格式字串會解譯為標準日期和時間字串。 不過,在這種特殊情形下會擲回例外狀況,因為並沒有 "h" 標準日期和時間格式規範。

    若要使用任何自訂日期和時間格式規範做為格式字串中的唯一規範 (也就是單獨使用 "d"、"f"、"F"、"g"、"h"、"H"、"K"、"m"、"M"、"s"、"t"、"y"、"z"、":" 或 "/" 自訂格式規範),請在規範之前或之後加上一個空格,或在單一自訂日期和時間規範之前加上一個百分比 ("%") 格式規範。

    例如,"%h" 會解譯為自訂日期和時間格式字串,該字串會顯示由目前日期和時間值所表示的小時。 您也可以使用 " h" 或 "h " 格式字串,然而這會在結果字串中的小時旁邊加上空格。 下列範例示範這三個格式字串。

    DateTime dat1 = new DateTime(2009, 6, 15, 13, 45, 0);
    Console.WriteLine("'{0:%h}'", dat1);
    Console.WriteLine("'{0: h}'", dat1);
    Console.WriteLine("'{0:h }'", dat1);
    // The example displays the following output:
    //       '1'
    //       ' 1'
    //       '1 '
    
    Dim dat1 As Date = #6/15/2009 1:45PM#
    Console.WriteLine("'{0:%h}'", dat1)
    Console.WriteLine("'{0: h}'", dat1)
    Console.WriteLine("'{0:h }'", dat1)
    ' The example displays the following output:
    '       '1'
    '       ' 1'
    '       '1 '
    

    使用逸出字元

    格式字串中的 "d"、"f"、"F"、"g"、"h"、"H"、"K"、"m"、"M"、"s"、"t"、"y"、"z"、":" 或 "/" 字元會解譯為自訂格式規範,而不是常值字元。 若要避免將字元解譯為格式規範,您可以在前面加上反斜線 (\),這是逸出字元。 逸出字元表示接下來的字元是字元常值,應該原封不動地放入結果字串中。

    若要在結果字串中加上反斜線,您必須再加上一個反斜線 (變成\\),才能將反斜線解譯為常值。

    某些編譯器 (例如 C++ 和 C# 編譯器) 也可能會將單一反斜線字元解譯為逸出字元。 為了確保字串在格式化時能夠正確獲得解譯,您可以在 C# 中的字串前面加上逐字字串常值字元 (@ 字元),或在 C# 和 C++ 中的每個反斜線前面再加上一個反斜線字元。 下列 C# 範例示範這兩種做法。

    下列範例會使用逸出字元,以避免格式化作業將 "h" 和 "m" 字元解譯為格式規範。

    DateTime date = new DateTime(2009, 06, 15, 13, 45, 30, 90);
    string fmt1 = "h \\h m \\m";
    string fmt2 = @"h \h m \m";
    Console.WriteLine("{0} ({1}) -> {2}", date, fmt1, date.ToString(fmt1));
    Console.WriteLine("{0} ({1}) -> {2}", date, fmt2, date.ToString(fmt2));
    // The example displays the following output:
    //       6/15/2009 1:45:30 PM (h \h m \m) -> 1 h 45 m
    //       6/15/2009 1:45:30 PM (h \h m \m) -> 1 h 45 m
    
    Dim date1 As Date = #6/15/2009 13:45#
    Dim fmt As String = "h \h m \m"
    Console.WriteLine("{0} ({1}) -> {2}", date1, fmt, date1.ToString(fmt))
    ' The example displays the following output:
    '       6/15/2009 1:45:00 PM (h \h m \m) -> 1 h 45 m      
    

    控制台設定

    [控制台] 中的 [地區及語言選項] 設定會影響格式化作業 (其中包含許多自訂日期和時間格式規範) 所產生的結果字串。 這些設定可用來初始化 DateTimeFormatInfo 與目前文化特性相關聯的物件,以提供用來控管格式設定的值。 使用不同設定的電腦會產生不同的結果字串。

    此外,如果您使用 CultureInfo(String) 建構函式來將新的 CultureInfo 物件具現化,而此物件代表的文化特性與目前系統文化特性相同,則 [控制台] 中的 [地區及語言選項] 項目所建立的任何自訂都會套用至新的 CultureInfo 物件。 您可以使用 CultureInfo(String, Boolean) 建構函式來建立不反映系統自訂的 CultureInfo 物件。

    DateTimeFormatInfo 屬性

    格式會受到目前 物件的屬性所影響,此屬性是由目前 DateTimeFormatInfo 文化特性隱含提供,或是由 IFormatProvider 叫用格式之方法的 參數明確提供。 在 IFormatProvider 參數中,您應該指定表示文化特性的 CultureInfo 物件,指定或 DateTimeFormatInfo 物件。

    許多自訂日期和時間格式規範所產生的結果字串,也取決於目前 DateTimeFormatInfo 物件的屬性。 您的應用程式可以變更對應的 DateTimeFormatInfo 屬性,藉此改變某些自訂日期和時間格式規範所產生的結果。 例如,"ddd" 格式規範會將 AbbreviatedDayNames 字串陣列中找到的縮寫星期幾名稱加入至結果字串。 同樣地,"MMMM" 格式規範會將 MonthNames 字串陣列中找到的完整月份名稱加到結果字串。

  • System.DateTime
  • System.IFormatProvider
  • 格式化類型
  • 標準日期和時間格式字串
  • 範例: .NET 核心 WinForms 格式化公用程式 (C#)
  • 範例: .NET Core WinForms 格式化公用程式 (Visual Basic)
  •