閱讀英文

共用方式為


標準日期和時間格式字串

標準日期和時間格式字串會使用單一字元做為格式規範,以定義 DateTimeDateTimeOffset 值的文字表示。 包含多個字元的任何日期和時間格式字串,包括空格符,會解譯為 自定義日期和時間格式字串。 標準或自定義格式字串可以透過兩種方式使用:

  • 若要定義格式設定作業所產生的字串。

  • 若要定義日期和時間值的文字表示,這些值可以透過剖析作業轉換成 DateTimeDateTimeOffset 值。

提示

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

注意

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

Try.NET 內嵌程式代碼執行器和遊樂場的 當地時區 為國際標準時間或 UTC。 這可能會影響範例的行為和輸出,這些範例說明 DateTimeDateTimeOffsetTimeZoneInfo 型別及其成員。

格式規範的表格

下表描述標準日期和時間的格式規範。 除非另有說明,否則特定標準日期和時間格式規範會產生相同的字串表示法,不論它是否與 DateTimeDateTimeOffset 值搭配使用。 如需使用標準日期和時間格式字串的詳細資訊,請參閱 控制面板設定DateTimeFormatInfo 屬性

格式規範 說明 範例
"d" 簡短日期模式。

詳細資訊:簡短日期 (“d”) 格式規範
2009-06-15T13:45:30 -> 2009/6/15 (en-US)

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

2009-06-15T13:45:30 -> 2009/06/15 (ja-JP)
“D” 完整日期模式。

詳細資訊:長日期 (“D”) 格式規範
2009-06-15T13:45:30 -> 2009 年 6 月 15 日星期一 (en-US)

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

2009-06-15T13:45:30 -> Montag, 15. Juni 2009 (de-DE)
“f” 完整日期/時間模式 (簡短時間)。

詳細資訊: 完整日期短時間 (“f”) 格式規範
2009-06-15T13:45:30 -> 2009 年 6 月 15 日下午 1:45 (en-US)

2009-06-15T13:45:30 -> den 15 juni 2009 13:45 (sv-SE)

2009-06-15T13:45:30 -> ーυлέα, 15 Елυνίυ 2009 1:45лл(el-GR)
"F" 完整日期/時間模式 (完整時間)。

詳細資訊: 完整日期完整時間 (“F”) 格式規範
2009-06-15T13:45:30 -> 2009 年 6 月 15 日星期一 下午 1:45:30 (en-US)

2009-06-15T13:45:30 -> den 15 juni 2009 13:45:30 (sv-SE)

2009-06-15T13:45:30 -> ーυлέα, 15 Αυνίυ 2009 1:45:30л(el-GR)
"g" 一般日期/時間模式 (簡短時間)。

詳細資訊: 一般日期短時間 (“g”) 格式規範
2009-06-15T13:45:30 -> 6/15/2009 下午 1:45 (en-US)

2009-06-15T13:45:30 -> 2009/15/06 13:45 (es-ES)

2009-06-15T13:45:30 -> 2009/6/15 13:45 (zh-CN)
"G" 一般日期/時間模式 (完整時間)。

詳細資訊: 一般日期長時間 (“G”) 格式規範
2009-06-15T13:45:30 -> 6/15/2009 下午 1:45:30 (en-US)

2009-06-15T13:45:30 -> 2009/15/06 13:45:30 (es-ES)

2009-06-15T13:45:30 -> 2009/6/15 13:45:30 (zh-CN)
"M"、"m" 月/日模式。

詳細資訊: 月份 (“M”, “m”) 格式規範
2009-06-15T13:45:30 -> 6 月 15 日 (en-US)

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

2009-06-15T13:45:30 -> 15 Juni (id-ID)
"O"、"o" 來回日期/時間模式。

詳細資訊: 往返 (“O”, “o”) 格式規範
DateTime 值:

2009-06-15T13:45:30 (DateTimeKind.Local) --> 2009-06-15T13:45:30.0000000-07:00

2009-06-15T13:45:30 (DateTimeKind.Utc) --> 2009-06-15T13:45:30.0000000Z

2009-06-15T13:45:30 (DateTimeKind.Unspecified) --> 2009-06-15T13:45:30.0000000

DateTimeOffset 值:

2009-06-15T13:45:30-07:00 --> 2009-06-15T13:45:30.0000000-07:00
"R"、"r" RFC1123 模式。

詳細資訊: RFC1123 (“R”, “r”) 格式規範
DateTimeOffset 輸入:2009-06-15T13:45:30 -> 2009 年 6 月 15 日 20:45:30 GMT
DateTime 輸入:2009-06-15T13:45:30 -> 2009 年 6 月 15 日 13:45:30 GMT
"s" 可排序日期/時間模式。

詳細資訊: 可排序的格式規範
2009-06-15T13:45:30 (DateTimeKind.Local) -> 2009-06-15T13:45:30

2009-06-15T13:45:30 (DateTimeKind.Utc) -> 2009-06-15T13:45:30
"t" 簡短時間模式。

詳細資訊: 短時間 (“t”) 格式規範
2009-06-15T13:45:30 -> 下午 1:45 (en-US)

2009-06-15T13:45:30 -> 13:45 (hr-HR)

2009-06-15T13:45:30 -> 01:45 م (ar-EG)
"T" 完整時間模式。

詳細資訊: 較長的時間 (“T”) 格式規範
2009-06-15T13:45:30 -> 下午 1:45:30 (en-US)

2009-06-15T13:45:30 -> 13:45:30 (hr-HR)

2009-06-15T13:45:30 -> 01:45:30 م (ar-EG)
"u" 國際可排序日期/時間模式。

詳細資訊: 通用可排序 (“u”) 格式規範
具有 DateTime 值:2009-06-15T13:45:30 -> 2009-06-15 13:45:30Z

具有 DateTimeOffset 值:2009-06-15T13:45:30 -> 2009-06-15 20:45:30Z
“U” 通用完整日期/時間模式。

詳細資訊:通用完整格式規範
2009-06-15T13:45:30 -> 2009 年 6 月 15 日星期一 下午 8:45:30 (en-US)

2009-06-15T13:45:30 -> 登 15 juni 2009 20:45:30 (sv-SE)

2009-06-15T13:45:30 -> ーυлέー,15 Елυνίυ 2009 8:45:30ーー (el-GR)
"Y", "y" 年月模式。

詳細資訊: 年月 (“Y”) 格式規範
2009-06-15T13:45:30 -> 2009 年 6 月 (en-US)

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

2009-06-15T13:45:30 -> Juni 2009 (id-ID)
任何其他單一字元 未知的規範。 擲回執行時間 FormatException

標準格式字串的運作方式

在格式化作業中,標準格式字串只是自訂格式字串的別名。 使用別名來表示自訂格式字串的好處是,儘管別名保持不變,自訂格式字串本身則可有變化。 這點非常重要,因為日期和時間值的字串表示通常會因文化特性而不同。 例如,"d" 標準格式字串表示日期和時間值將使用簡短日期模式顯示。 在不因文化特性而異 (Invariant Culture) 的情況下,此模式為 "MM/dd/yyyy"。 若為 fr-FR 文化特性,則是 "dd/MM/yyyy"。 若為 ja-JP 文化特性,則是 "yyyy/MM/dd"。

如果格式化作業中的標準格式字串對應至特定文化特性的自訂格式字串,您的應用程式可以定義特定文化特性,以下列其中一種方式使用自訂格式字串:

  • 您可以使用預設 (或目前的) 文化特性。 下列範例顯示的日期使用了目前文化特性的簡短日期格式。 在此例中,目前的文化特性是 en-US。

    C#
    // Display using current (en-us) culture's short date format
    DateTime thisDate = new DateTime(2008, 3, 15);
    Console.WriteLine(thisDate.ToString("d"));           // Displays 3/15/2008
    
  • 您可以傳遞 CultureInfo 物件,代表其格式設定要用於具有 IFormatProvider 參數的方法。 下列範例顯示的日期使用了 pt-BR 文化特性的簡短日期格式。

    C#
    // Display using pt-BR culture's short date format
    DateTime thisDate = new DateTime(2008, 3, 15);
    CultureInfo culture = new CultureInfo("pt-BR");
    Console.WriteLine(thisDate.ToString("d", culture));  // Displays 15/3/2008
    
  • 您可以將 DateTimeFormatInfo 對象傳遞給具有 IFormatProvider 參數的方法格式資訊。 下列範例會使用來自 hr-HR 文化特性之 DateTimeFormatInfo 對象的簡短日期格式來顯示日期。

    C#
    // Display using date format information from hr-HR culture
    DateTime thisDate = new DateTime(2008, 3, 15);
    DateTimeFormatInfo fmt = (new CultureInfo("hr-HR")).DateTimeFormat;
    Console.WriteLine(thisDate.ToString("d", fmt));      // Displays 15.3.2008
    

注意

如需自定義格式化日期和時間值中使用的模式或字串的相關信息,請參閱 NumberFormatInfo 類別主題。

在某些情況下,標準格式字串可做為不變之長自訂格式字串的簡便縮寫。 有四個標準格式字串屬於此分類:"O" (或 "o")、"R" (或 "r")、"s" 和 "u"。 這些字串相當於不因文化特性而異所定義的自訂格式字串。 它們針對日期和時間值所產生的字串表示在各文化特性中都相同。 下表提供這四種標準日期和時間格式字串的相關資訊。

標準格式字串 由 DateTimeFormatInfo.InvariantInfo 屬性定義 自訂格式字串
"O" 或 "o" 沒有 yyyy'-'MM'-'dd'T'HH':'mm':'ss'。fffffffK
"R" 或 "r" RFC1123Pattern ddd、dd MMM yyyy HH':'mm':'ss 'GMT'
"s" SortableDateTimePattern yyyy'-'MM'-'dd'T'HH':'mm':'ss
"u" UniversalSortableDateTimePattern yyyy'-'MM'-'dd HH':'mm':'ss'Z'

標準格式字串也可用於剖析作業與 DateTime.ParseExactDateTimeOffset.ParseExact 方法,這需要輸入字串完全符合特定模式,剖析作業才能成功。 許多標準格式字串會對應至多個自定義格式字串,因此日期和時間值可以用各種格式表示,剖析作業仍會成功。 您可以呼叫 DateTimeFormatInfo.GetAllDateTimePatterns(Char) 方法來判斷對應至標準格式字串的自訂格式字串或字串。 下列範例會顯示對應至 「d」 (簡短日期模式) 標準格式字串的自定義格式字串。

C#
using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      Console.WriteLine("'d' standard format string:");
      foreach (var customString in DateTimeFormatInfo.CurrentInfo.GetAllDateTimePatterns('d'))
          Console.WriteLine($"   {customString}");
   }
}
// The example displays the following output:
//       'd' standard format string:
//          M/d/yyyy
//          M/d/yy
//          MM/dd/yy
//          MM/dd/yyyy
//          yy/MM/dd
//          yyyy-MM-dd
//          dd-MMM-yy

下列各節說明 DateTimeDateTimeOffset 值的標準格式規範。

日期格式

此群組包含下列格式:

簡短日期 ("d")

“d” 標準格式規範代表由特定文化特性的 DateTimeFormatInfo.ShortDatePattern 屬性所定義的自定義日期和時間格式字串。 例如,非變異文化特性 ShortDatePattern 屬性所傳回的自定義格式字元串是 “MM/dd/yy”。

下表列出控制傳回字串格式設定的 DateTimeFormatInfo 物件屬性。

財產 說明
ShortDatePattern 定義結果字串的整體格式。
DateSeparator 定義字串,以分隔日期的年、月和日元件。

下列範例使用 「d」 格式規範來顯示日期和時間值。

C#
DateTime date1 = new DateTime(2008,4, 10);
Console.WriteLine(date1.ToString("d", DateTimeFormatInfo.InvariantInfo));
// Displays 04/10/2008
Console.WriteLine(date1.ToString("d",
                  CultureInfo.CreateSpecificCulture("en-US")));
// Displays 4/10/2008
Console.WriteLine(date1.ToString("d",
                  CultureInfo.CreateSpecificCulture("en-NZ")));
// Displays 10/04/2008
Console.WriteLine(date1.ToString("d",
                  CultureInfo.CreateSpecificCulture("de-DE")));
// Displays 10.04.2008

回到表格

完整日期 ("D") 格式規範

“D” 標準格式規範代表由目前 DateTimeFormatInfo.LongDatePattern 屬性定義的自定義日期和時間格式字串。 例如,不因文化特性而異的自訂格式字串為 "dddd, dd MMMM yyyy"。

下表列出控制所傳回字串格式之 DateTimeFormatInfo 對象的屬性。

財產 說明
LongDatePattern 定義結果字串的整體格式。
DayNames 定義可以出現在結果字串中的當地語系化日名稱。
MonthNames 定義可出現在結果字串中的當地語系化月份名稱。

下列範例使用 "D" 格式規範來顯示日期和時間值。

C#
DateTime date1 = new DateTime(2008, 4, 10);
Console.WriteLine(date1.ToString("D",
                  CultureInfo.CreateSpecificCulture("en-US")));
// Displays Thursday, April 10, 2008
Console.WriteLine(date1.ToString("D",
                  CultureInfo.CreateSpecificCulture("pt-BR")));
// Displays quinta-feira, 10 de abril de 2008
Console.WriteLine(date1.ToString("D",
                  CultureInfo.CreateSpecificCulture("es-MX")));
// Displays jueves, 10 de abril de 2008

回到表格

日期和時間格式

此群組包含下列格式:

完整日期簡短時間 ("f") 格式規範

"f" 標準格式規範表示完整日期 ("D") 和簡短時間 ("t") 模式的組合,以空格分隔。

結果字串會受到特定 DateTimeFormatInfo 物件的格式化資訊所影響。 下表列出可控制傳回字串格式設定的 DateTimeFormatInfo 物件屬性。 某些文化特性 DateTimeFormatInfo.LongDatePatternDateTimeFormatInfo.ShortTimePattern 屬性所傳回的自定義格式規範可能無法使用所有屬性。

財產 說明
LongDatePattern 定義結果字串的日期元件格式。
ShortTimePattern 定義結果字串的時間元件格式。
DayNames 定義可以出現在結果字串中的當地語系化日名稱。
MonthNames 定義可出現在結果字串中的當地語系化月份名稱。
TimeSeparator 定義字串,以分隔時間的小時、分鐘和秒元件。
AMDesignator 定義字串,這個字串表示從午夜到中午 12 小時制前的時間。
PMDesignator 定義字串,以12小時制表示從中午到午夜之前的時間。

下列範例使用 "f" 格式規範來顯示日期和時間值。

C#
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToString("f",
                  CultureInfo.CreateSpecificCulture("en-US")));
// Displays Thursday, April 10, 2008 6:30 AM
Console.WriteLine(date1.ToString("f",
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays jeudi 10 avril 2008 06:30

回到表格

完整日期完整時間 ("F") 格式規範

“F” 標準格式規範代表目前 DateTimeFormatInfo.FullDateTimePattern 屬性所定義的自定義日期和時間格式字串。 例如,不因文化特性而異的自訂格式字串為 "dddd, dd MMMM yyyy HH:mm:ss"。

下表列出可控制傳回字串格式設定的 DateTimeFormatInfo 物件屬性。 某些文化特性 FullDateTimePattern 屬性所傳回的自定義格式規範可能無法使用所有屬性。

財產 說明
FullDateTimePattern 定義結果字串的整體格式。
DayNames 定義可以出現在結果字串中的當地語系化日名稱。
MonthNames 定義可出現在結果字串中的當地語系化月份名稱。
TimeSeparator 定義字串,以分隔時間的小時、分鐘和秒元件。
AMDesignator 定義字串,這個字串表示從午夜到中午 12 小時制前的時間。
PMDesignator 定義字串,以12小時制表示從中午到午夜之前的時間。

下列範例使用 "F" 格式規範來顯示日期和時間值。

C#
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToString("F",
                  CultureInfo.CreateSpecificCulture("en-US")));
// Displays Thursday, April 10, 2008 6:30:00 AM
Console.WriteLine(date1.ToString("F",
                  CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays jeudi 10 avril 2008 06:30:00

回到表格

一般日期簡短時間 ("g") 格式規範

"g" 標準格式規範表示簡短日期 ("d") 和簡短時間 ("t") 模式的組合,以空格分隔。

結果字串會受到特定 DateTimeFormatInfo 物件的格式化資訊所影響。 下表列出可控制傳回字串格式設定的 DateTimeFormatInfo 物件屬性。 某些文化特性的 DateTimeFormatInfo.ShortDatePatternDateTimeFormatInfo.ShortTimePattern 屬性所傳回的自定義格式規範可能無法使用所有屬性。

財產 說明
ShortDatePattern 定義結果字串的日期元件格式。
ShortTimePattern 定義結果字串的時間元件格式。
DateSeparator 定義字串,以分隔日期的年、月和日元件。
TimeSeparator 定義字串,以分隔時間的小時、分鐘和秒元件。
AMDesignator 定義字串,這個字串表示從午夜到中午 12 小時制前的時間。
PMDesignator 定義字串,以12小時制表示從中午到午夜之前的時間。

下列範例使用 "g" 格式規範來顯示日期和時間值。

C#
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToString("g",
                  DateTimeFormatInfo.InvariantInfo));
// Displays 04/10/2008 06:30
Console.WriteLine(date1.ToString("g",
                  CultureInfo.CreateSpecificCulture("en-us")));
// Displays 4/10/2008 6:30 AM
Console.WriteLine(date1.ToString("g",
                  CultureInfo.CreateSpecificCulture("fr-BE")));
// Displays 10/04/2008 6:30

回到表格

一般日期完整時間 ("G") 格式規範

"G" 標準格式規範表示簡短日期 ("d") 和完整時間 ("T") 模式的組合,以空格分隔。

結果字串會受到特定 DateTimeFormatInfo 物件的格式化資訊所影響。 下表列出可控制傳回字串格式設定的 DateTimeFormatInfo 物件屬性。 某些文化特性的 DateTimeFormatInfo.ShortDatePatternDateTimeFormatInfo.LongTimePattern 屬性所傳回的自定義格式規範可能無法使用所有屬性。

財產 說明
ShortDatePattern 定義結果字串的日期元件格式。
LongTimePattern 定義結果字串的時間元件格式。
DateSeparator 定義字串,以分隔日期的年、月和日元件。
TimeSeparator 定義字串,以分隔時間的小時、分鐘和秒元件。
AMDesignator 定義字串,這個字串表示從午夜到中午 12 小時制前的時間。
PMDesignator 定義字串,以12小時制表示從中午到午夜之前的時間。

下列範例使用 "G" 格式規範來顯示日期和時間值。

C#
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToString("G",
                  DateTimeFormatInfo.InvariantInfo));
// Displays 04/10/2008 06:30:00
Console.WriteLine(date1.ToString("G",
                  CultureInfo.CreateSpecificCulture("en-us")));
// Displays 4/10/2008 6:30:00 AM
Console.WriteLine(date1.ToString("G",
                  CultureInfo.CreateSpecificCulture("nl-BE")));
// Displays 10/04/2008 6:30:00

回到表格

來回行程 ("O"、"o") 格式規範

"O" 或 "o" 標準格式規範可表示使用保存時區資訊之模式的自訂日期和時間格式字串,並發出符合 ISO 8601 的結果字串。 針對 DateTime 值,此格式規範的設計目的是要保留日期和時間值,以及文字中的 DateTime.Kind 屬性。 如果 styles 參數設定為 DateTimeStyles.RoundtripKind,則可以使用 DateTime.Parse(String, IFormatProvider, DateTimeStyles)DateTime.ParseExact 方法來剖析格式化字串。

“O” 或 “o” 標準格式規範對應於 “yyyy'-'MM'-'dd'T'HH':'mm':'ss''。fffffffK“ DateTime 值的自定義格式字串串,以及 ”yyyy'-'MM'-'dd'T'HH':'mm':'ss'' 。fffffffzzz“ DateTimeOffset 值的自訂格式字串。 在此字串中,分隔個別字元的單引號組,例如連字元、冒號和字母 “T”,表示個別字元是無法變更的常值。 單引號不會出現在輸出字串中。

“O” 或 “o” 標準格式規範(以及 “yyyy'-'MM'-'dd'T'HH':'mm':'ss'' 。fffffffK“ 自定義格式字串)利用 ISO 8601 代表時區資訊的三種方式,以保留 DateTime 值的 Kind 屬性:

因為 "O" 或 "o" 標準格式規範符合國際標準,所以使用該規範的格式化或剖析作業一律使用不因國別而異的文化特性和西曆。

傳遞至 ParseTryParseParseExactTryParseExact 方法的字串,可以使用下列其中一種格式的 “O” 或 “o” 格式規範來剖析 DateTimeDateTimeOffset。 在 DateTime 對象的情況下,您呼叫的剖析多載也應該包含具有 DateTimeStyles.RoundtripKind值的 styles 參數。 請注意,如果您使用對應至 「O」 或 「o」 格式規範的自定義格式字串呼叫剖析方法,則不會取得與 “O” 或 “o” 相同的結果。 這是因為使用自定義格式字串的剖析方法無法剖析缺少時區元件的日期和時間值的字串表示法,或使用 “Z” 表示 UTC。

下列範例會使用 「o」 格式規範來顯示一系列 DateTime 值,以及美國太平洋時區系統上的 DateTimeOffset 值。

C#
using System;

public class Example
{
   public static void Main()
   {
       DateTime dat = new DateTime(2009, 6, 15, 13, 45, 30,
                                   DateTimeKind.Unspecified);
       Console.WriteLine($"{dat} ({dat.Kind}) --> {dat:O}");

       DateTime uDat = new DateTime(2009, 6, 15, 13, 45, 30,
                                    DateTimeKind.Utc);
       Console.WriteLine($"{uDat} ({uDat.Kind}) --> {uDat:O}");

       DateTime lDat = new DateTime(2009, 6, 15, 13, 45, 30,
                                    DateTimeKind.Local);
       Console.WriteLine($"{lDat} ({lDat.Kind}) --> {lDat:O}\n");

       DateTimeOffset dto = new DateTimeOffset(lDat);
       Console.WriteLine($"{dto} --> {dto:O}");
   }
}
// The example displays the following output:
//    6/15/2009 1:45:30 PM (Unspecified) --> 2009-06-15T13:45:30.0000000
//    6/15/2009 1:45:30 PM (Utc) --> 2009-06-15T13:45:30.0000000Z
//    6/15/2009 1:45:30 PM (Local) --> 2009-06-15T13:45:30.0000000-07:00
//
//    6/15/2009 1:45:30 PM -07:00 --> 2009-06-15T13:45:30.0000000-07:00

下列範例會使用 「o」 格式規範來建立格式化字串,然後藉由呼叫日期和時間 Parse 方法來還原原始日期和時間值。

C#
// Round-trip DateTime values.
DateTime originalDate, newDate;
string dateString;
// Round-trip a local time.
originalDate = DateTime.SpecifyKind(new DateTime(2008, 4, 10, 6, 30, 0), DateTimeKind.Local);
dateString = originalDate.ToString("o");
newDate = DateTime.Parse(dateString, null, DateTimeStyles.RoundtripKind);
Console.WriteLine($"Round-tripped {originalDate} {originalDate.Kind} to {newDate} {newDate.Kind}.");
// Round-trip a UTC time.
originalDate = DateTime.SpecifyKind(new DateTime(2008, 4, 12, 9, 30, 0), DateTimeKind.Utc);
dateString = originalDate.ToString("o");
newDate = DateTime.Parse(dateString, null, DateTimeStyles.RoundtripKind);
Console.WriteLine($"Round-tripped {originalDate} {originalDate.Kind} to {newDate} {newDate.Kind}.");
// Round-trip time in an unspecified time zone.
originalDate = DateTime.SpecifyKind(new DateTime(2008, 4, 13, 12, 30, 0), DateTimeKind.Unspecified);
dateString = originalDate.ToString("o");
newDate = DateTime.Parse(dateString, null, DateTimeStyles.RoundtripKind);
Console.WriteLine($"Round-tripped {originalDate} {originalDate.Kind} to {newDate} {newDate.Kind}.");

// Round-trip a DateTimeOffset value.
DateTimeOffset originalDTO = new DateTimeOffset(2008, 4, 12, 9, 30, 0, new TimeSpan(-8, 0, 0));
dateString = originalDTO.ToString("o");
DateTimeOffset newDTO = DateTimeOffset.Parse(dateString, null, DateTimeStyles.RoundtripKind);
Console.WriteLine($"Round-tripped {originalDTO} to {newDTO}.");
// The example displays the following output:
//    Round-tripped 4/10/2008 6:30:00 AM Local to 4/10/2008 6:30:00 AM Local.
//    Round-tripped 4/12/2008 9:30:00 AM Utc to 4/12/2008 9:30:00 AM Utc.
//    Round-tripped 4/13/2008 12:30:00 PM Unspecified to 4/13/2008 12:30:00 PM Unspecified.
//    Round-tripped 4/12/2008 9:30:00 AM -08:00 to 4/12/2008 9:30:00 AM -08:00.

回到表格

RFC1123 ("R"、"r") 格式規範

“R” 或 “r” 標準格式規範代表由 DateTimeFormatInfo.RFC1123Pattern 屬性定義的自定義日期和時間格式字串。 此模式反映已定義的標準,且屬性為唯讀。 因此,不論所使用的文化特性或提供的格式提供者為何,它一定會是相同的。 自訂格式字串為 "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'"。 使用這個標準格式規範時,格式或剖析作業一律使用不因文化特性而異。

結果字串會受到代表不因文化特性之 DateTimeFormatInfo.InvariantInfo 屬性所傳回之 DateTimeFormatInfo 物件的下列屬性所影響。

財產 說明
RFC1123Pattern 定義結果字串的格式。
AbbreviatedDayNames 定義可以出現在結果字串中的縮寫日期名稱。
AbbreviatedMonthNames 定義可以出現在結果字串中的縮寫月份名稱。

雖然 RFC 1123 標準以國際標準時間表示時間(UTC),但格式化作業不會修改格式化 DateTime 物件的值。 因此,執行格式化作業之前,您必須先呼叫 DateTime.ToUniversalTime 方法,將 DateTime 值轉換成 UTC。 相反地,DateTimeOffset 值會自動執行此轉換;在格式化作業之前,不需要呼叫 DateTimeOffset.ToUniversalTime 方法。

下列範例會使用 「r」 格式規範,在美國太平洋時區的系統上顯示 DateTimeDateTimeOffset 值。

C#
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
DateTimeOffset dateOffset = new DateTimeOffset(date1,
                            TimeZoneInfo.Local.GetUtcOffset(date1));
Console.WriteLine(date1.ToUniversalTime().ToString("r"));
// Displays Thu, 10 Apr 2008 13:30:00 GMT
Console.WriteLine(dateOffset.ToUniversalTime().ToString("r"));
// Displays Thu, 10 Apr 2008 13:30:00 GMT

回到表格

可排序 ("s") 格式規範

“s” 標準格式規範代表由 DateTimeFormatInfo.SortableDateTimePattern 屬性定義的自定義日期和時間格式字串。 此模式會反映已定義的標準 (ISO 8601),而且 屬性是唯讀的。 因此,不論所使用的文化特性或提供的格式提供者為何,它一定會是相同的。 自訂格式字串為 "yyyy'-'MM'-'dd'T'HH':'mm':'ss"。

"s" 格式規範的目的在於產生結果字串時,能夠根據日期和時間值,一致地以遞增或遞減順序排序。 因此,雖然 「s」 標準格式規範代表一致格式的日期和時間值,但格式設定作業不會修改格式化的日期和時間物件值,以反映其 DateTime.Kind 屬性或其 DateTimeOffset.Offset 值。 例如,格式化日期和時間值 2014-11-15T18:32:17+00:00 和 2014-11-15T18:32:17+08:00 所產生的結果字符串完全相同。

使用這個標準格式規範時,格式或剖析作業一律使用不因文化特性而異。

下列範例會使用 「s」 格式規範,在美國太平洋時區的系統上顯示 DateTimeDateTimeOffset 值。

C#
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToString("s"));
// Displays 2008-04-10T06:30:00

回到表格

國際可排序 ("u") 格式規範

“u” 標準格式規範代表由 DateTimeFormatInfo.UniversalSortableDateTimePattern 屬性定義的自定義日期和時間格式字串。 此模式反映已定義的標準,且屬性為唯讀。 因此,不論所使用的文化特性或提供的格式提供者為何,它一定會是相同的。 自訂格式字串為 "yyyy'-'MM'-'dd HH':'mm':'ss'Z'"。 使用這個標準格式規範時,格式或剖析作業一律使用不因文化特性而異。

雖然結果字串應該以國際標準時間表示時間(UTC),但在格式化作業期間不會執行原始 DateTime 值轉換。 因此,在格式化 DateTime.ToUniversalTime 方法之前,您必須呼叫 DateTime.ToUniversalTime 方法,將 DateTime 值轉換成 UTC。 相反地,DateTimeOffset 值會自動執行此轉換;在格式化作業之前,不需要呼叫 DateTimeOffset.ToUniversalTime 方法。

下列範例使用 "u" 格式規範來顯示日期和時間值。

C#
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToUniversalTime().ToString("u"));
// Displays 2008-04-10 13:30:00Z

回到表格

通用完整 (“U”) 格式規範

“U” 標準格式規範代表由指定文化特性的 DateTimeFormatInfo.FullDateTimePattern 屬性所定義的自定義日期和時間格式字串。 模式與 「F」 模式相同。 不過,DateTime 值會在格式化之前自動轉換成 UTC。

下表列出可控制傳回字串格式設定的 DateTimeFormatInfo 物件屬性。 某些文化特性 FullDateTimePattern 屬性所傳回的自定義格式規範可能無法使用所有屬性。

財產 說明
FullDateTimePattern 定義結果字串的整體格式。
DayNames 定義可以出現在結果字串中的當地語系化日名稱。
MonthNames 定義可出現在結果字串中的當地語系化月份名稱。
TimeSeparator 定義字串,以分隔時間的小時、分鐘和秒元件。
AMDesignator 定義字串,這個字串表示從午夜到中午 12 小時制前的時間。
PMDesignator 定義字串,以12小時制表示從中午到午夜之前的時間。

DateTimeOffset 類型不支援 「U」 格式規範,如果用來格式化 DateTimeOffset 值,則會擲回 FormatException

下列範例使用 「U」 格式規範來顯示日期和時間值。

C#
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToString("U",
                  CultureInfo.CreateSpecificCulture("en-US")));
// Displays Thursday, April 10, 2008 1:30:00 PM
Console.WriteLine(date1.ToString("U",
                  CultureInfo.CreateSpecificCulture("sv-FI")));
// Displays den 10 april 2008 13:30:00

回到表格

時間格式

此群組包含下列格式:

簡短時間 ("t") 格式規範

“t” 標準格式規範代表由目前 DateTimeFormatInfo.ShortTimePattern 屬性定義的自定義日期和時間格式字串。 例如,不因文化特性而異的自訂格式字串為 "HH:mm"。

結果字串會受到特定 DateTimeFormatInfo 物件的格式化資訊所影響。 下表列出可控制傳回字串格式設定的 DateTimeFormatInfo 物件屬性。 某些文化特性 DateTimeFormatInfo.ShortTimePattern 屬性所傳回的自定義格式規範可能無法使用所有屬性。

財產 說明
ShortTimePattern 定義結果字串的時間元件格式。
TimeSeparator 定義字串,以分隔時間的小時、分鐘和秒元件。
AMDesignator 定義字串,這個字串表示從午夜到中午 12 小時制前的時間。
PMDesignator 定義字串,以12小時制表示從中午到午夜之前的時間。

下列範例使用 "t" 格式規範來顯示日期和時間值。

C#
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToString("t",
                  CultureInfo.CreateSpecificCulture("en-us")));
// Displays 6:30 AM
Console.WriteLine(date1.ToString("t",
                  CultureInfo.CreateSpecificCulture("es-ES")));
// Displays 6:30

回到表格

完整時間 ("T") 格式規範

“T” 標準格式規範代表由特定文化特性的 DateTimeFormatInfo.LongTimePattern 屬性所定義的自定義日期和時間格式字串。 例如,不因文化特性而異的自訂格式字串為 "HH:mm:ss"。

下表列出可控制傳回字串格式設定的 DateTimeFormatInfo 物件屬性。 某些文化特性 DateTimeFormatInfo.LongTimePattern 屬性所傳回的自定義格式規範可能無法使用所有屬性。

財產 說明
LongTimePattern 定義結果字串的時間元件格式。
TimeSeparator 定義字串,以分隔時間的小時、分鐘和秒元件。
AMDesignator 定義字串,這個字串表示從午夜到中午 12 小時制前的時間。
PMDesignator 定義字串,以12小時制表示從中午到午夜之前的時間。

下列範例使用 "T" 格式規範來顯示日期和時間值。

C#
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToString("T",
                  CultureInfo.CreateSpecificCulture("en-us")));
// Displays 6:30:00 AM
Console.WriteLine(date1.ToString("T",
                  CultureInfo.CreateSpecificCulture("es-ES")));
// Displays 6:30:00

回到表格

部分日期格式

此群組包含下列格式:

月 ("M"、"m") 格式規範

“M” 或 “m” 標準格式規範代表由目前 DateTimeFormatInfo.MonthDayPattern 屬性定義的自定義日期和時間格式字串。 例如,不因文化特性而異的自訂格式字串為 "MMMM dd"。

下表列出控制傳回字串格式設定的 DateTimeFormatInfo 物件屬性。

財產 說明
MonthDayPattern 定義結果字串的整體格式。
MonthNames 定義可出現在結果字串中的當地語系化月份名稱。

下列範例使用 "m" 格式規範來顯示日期和時間值。

C#
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToString("m",
                  CultureInfo.CreateSpecificCulture("en-us")));
// Displays April 10
Console.WriteLine(date1.ToString("m",
                  CultureInfo.CreateSpecificCulture("ms-MY")));
// Displays 10 April

回到表格

年月 ("Y"、"y") 格式規範

“Y” 或 “y” 標準格式規範代表由指定文化特性的 DateTimeFormatInfo.YearMonthPattern 屬性所定義的自定義日期和時間格式字串。 例如,不因文化特性而異的自訂格式字串為 "yyyy MMMM"。

下表列出控制傳回字串格式設定的 DateTimeFormatInfo 物件屬性。

財產 說明
YearMonthPattern 定義結果字串的整體格式。
MonthNames 定義可出現在結果字串中的當地語系化月份名稱。

下列範例使用 "y" 格式規範來顯示日期和時間值。

C#
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToString("Y",
                  CultureInfo.CreateSpecificCulture("en-US")));
// Displays April, 2008
Console.WriteLine(date1.ToString("y",
                  CultureInfo.CreateSpecificCulture("af-ZA")));
// Displays April 2008

回到表格

控制面板設定

在 Windows 中,[控制面板] 中 [地區和語言選項] 中的設定 專案會影響格式化作業所產生的結果字串。 這些設定可用來初始化與目前文化特性相關聯的 DateTimeFormatInfo 物件,以提供用來控管格式設定的值。 使用不同設定的計算機會產生不同的結果字串。

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

DateTimeFormatInfo 屬性

格式會受到目前 DateTimeFormatInfo 對象的屬性所影響,這個屬性是由目前文化特性隱含提供,或是由叫用格式之方法的 IFormatProvider 參數明確提供。 針對 IFormatProvider 參數,您的應用程式應該指定代表文化特性的 CultureInfo 物件,或代表特定文化特性日期和時間格式慣例的 DateTimeFormatInfo 物件。 許多標準日期和時間格式規範都是目前 DateTimeFormatInfo 物件屬性所定義之格式模式的別名。 您的應用程式可以藉由變更對應 DateTimeFormatInfo 屬性的對應日期和時間格式模式,來變更某些標準日期和時間格式規範所產生的結果。

另請參閱