标准日期和时间格式字符串使用单个字符作为格式说明符来定义 DateTime 或 DateTimeOffset 值的文本表示形式。 任何包含一个以上字符(包括空白)的日期和时间格式字符串都会作为自定义日期和时间格式字符串进行解释。 可以通过两种方式使用标准或自定义格式字符串:
定义格式设置作产生的字符串。
定义日期和时间值的文本表示形式,可通过分析作转换为 DateTime 或 DateTimeOffset 值。
小提示
可以下载 格式设置实用工具,这是一个 .NET Windows 窗体应用程序,可用于将格式字符串应用于数字值或日期和时间值,并显示结果字符串。 源代码可用于 C#,Visual Basic。
注释
本文中的一些 C# 示例在 Try.NET 内联代码运行程序和场中运行。 选择“运行”按钮以在交互窗口中运行示例。 执行代码后,可通过再次选择“运行”来修改它并运行已修改的代码。 已修改的代码要么在交互窗口中运行,要么编译失败时,交互窗口将显示所有 C# 编译器错误消息。
Try.NET 内联代码运行程序和场的 本地时区 是协调世界时或 UTC。 这可能会影响说明 DateTime、DateTimeOffset和 TimeZoneInfo 类型和成员的示例的行为和输出。
格式说明符表
下表描述了标准日期和时间格式说明符。 除非另有说明,否则特定的标准日期和时间格式说明符将生成相同的字符串表示形式,而不考虑它是与 DateTime 还是 DateTimeOffset 值一起使用。 有关使用标准日期和时间格式字符串的其他信息,请参阅 控制面板设置 和 DateTimeFormatInfo 属性。
格式说明符 | 说明 | 例子 |
---|---|---|
"d" | 短日期模式。 详细信息:短日期(“d”)格式说明符。 |
2009-06-15T13:45:30 -> 6/15/2009 (en-US) 2009-06-15T13:45:30 -> 15/06/2009 (fr-FR) 2009-06-15T13:45:30 -> 2009/06/15 (ja-JP) |
“D” | 长日期模式。 详细信息:长日期(“D”)格式说明符。 |
2009-06-15T13:45:30 -> Monday, June 15, 2009 (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 -> Monday, June 15, 2009 1:45 PM (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 -> Monday, June 15, 2009 1:45:30 PM (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 PM (en-US) 2009-06-15T13:45:30 -> 15/06/2009 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 PM (en-US) 2009-06-15T13:45:30 -> 15/06/2009 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 -> June 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 -> Mon, 2009 年 6 月 15 日 20:45:30 GMT DateTime 输入:2009-06-15T13:45:30 -> Mon, 2009 年 6 月 15 日 13:45:30 GMT |
“s” | 可排序日期/时间模式。 更多信息:可排序(“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 PM (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 PM (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 -> den 15 juni 2009 20:45:30 (sv-SE) 2009-06-15T13:45:30 -> Αευιέα, 15 Ιουνίου 2009 8:45:30μμ (el-GR) |
“Y”、“y” | 年月模式。 更多信息:年月(“Y”、“y”)格式说明符。 |
2009-06-15T13:45:30 -> June 2009 (en-US) 2009-06-15T13:45:30 -> juni 2009 (da-DK) 2009-06-15T13:45:30 -> Juni 2009 (id-ID) |
任何其他单个字符 | 未知说明符。 | 引发运行时 FormatException。 |
标准格式字符串的工作原理
在格式设置操作中,标准格式字符串只是自定义格式字符串的别名。 使用别名引用自定义格式字符串的优点是:尽管别名保持固定不变,自定义格式字符串自身也可以变化。 这很重要,因为日期和时间值的字符串表示形式通常会因区域性而异。 例如,“d”标准格式字符串指示应使用短日期模式显示日期和时间值。 对于固定区域性,此模式为“MM/dd/yyyy”。 对于 fr-FR 区域性,此模式为“dd/MM/yyyy”。 对于 ja-JP 区域性,此模式为“yyyy/MM/dd”。
如果格式设置操作中的标准格式字符串映射到某个特定区域性的自定义格式字符串,则应用程序可定义该特定区域性,并通过以下方式之一使用其自定义格式字符串:
可使用默认的(或当前的)区域性。 下面的示例使用当前区域性的短日期格式显示日期。 在此情况下,当前区域性为 en-US。
// 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
' Display using current (en-us) culture's short date format Dim thisDate As Date = #03/15/2008# Console.WriteLine(thisDate.ToString("d")) ' Displays 3/15/2008
可以传递表示其格式要用于具有 IFormatProvider 参数的方法的区域性的 CultureInfo 对象。 下面的示例使用 pt-BR 区域性的短日期格式显示日期。
// 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
' Display using pt-BR culture's short date format Dim thisDate As Date = #03/15/2008# Dim culture As New CultureInfo("pt-BR") Console.WriteLine(thisDate.ToString("d", culture)) ' Displays 15/3/2008
可以将 DateTimeFormatInfo 对象传递给具有 IFormatProvider 参数的方法的格式设置信息。 以下示例使用 hr-HR 区域性 DateTimeFormatInfo 对象的短日期格式显示日期。
// 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
' Display using date format information from hr-HR culture Dim thisDate As Date = #03/15/2008# Dim fmt As DateTimeFormatInfo = (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.ParseExact 或 DateTimeOffset.ParseExact 方法进行分析作,该方法要求输入字符串完全符合特定模式,使分析作成功。 许多标准格式字符串映射到多个自定义格式字符串,因此日期和时间值可以以各种格式表示,分析作仍将成功。 可以通过调用 DateTimeFormatInfo.GetAllDateTimePatterns(Char) 方法来确定与标准格式字符串相对应的自定义格式字符串或字符串。 以下示例显示映射到“d”(短日期模式)标准格式字符串的自定义格式字符串。
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
Imports System.Globalization
Module Example
Public Sub Main()
Console.WriteLine("'d' standard format string:")
For Each customString In DateTimeFormatInfo.CurrentInfo.GetAllDateTimePatterns("d"c)
Console.WriteLine(" {0}", customString)
Next
End Sub
End Module
' 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
以下各节介绍 DateTime 和 DateTimeOffset 值的标准格式说明符。
日期格式
此组包括以下格式:
短日期(“d”)格式说明符
“d”标准格式说明符表示由特定区域性的 DateTimeFormatInfo.ShortDatePattern 属性定义的自定义日期和时间格式字符串。 例如,固定区域性的 ShortDatePattern 属性返回的自定义格式字符串为“MM/dd/yy”。
下表列出了控制返回字符串格式的 DateTimeFormatInfo 对象属性。
财产 | 说明 |
---|---|
ShortDatePattern | 定义结果字符串的整体格式。 |
DateSeparator | 定义分隔日期的年、月和日部分的字符串。 |
以下示例使用“d”格式说明符来显示日期和时间值。
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
Dim date1 As Date = #4/10/2008#
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”格式说明符来显示日期和时间值。
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
Dim date1 As Date = #4/10/2008#
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”)格式说明符
- 常规日期短时间(“g”)格式说明符
- 常规日期长时间(“G”)格式说明符
- 往返(“O”、“o”)格式说明符
- RFC1123(“R”、“r”)格式说明符
- 可排序(“s”)格式说明符
- 通用可排序(“u”)格式说明符
- 通用完整格式说明符
完整日期短时间(“f”)格式说明符
“f”标准格式说明符表示长日期(“D”)和短时间(“t”)模式的组合,由空格分隔。
结果字符串受特定 DateTimeFormatInfo 对象的格式设置信息的影响。 下表列出了可以控制返回字符串格式的 DateTimeFormatInfo 对象属性。 由某些区域性的 DateTimeFormatInfo.LongDatePattern 和 DateTimeFormatInfo.ShortTimePattern 属性返回的自定义格式说明符可能无法使用所有属性。
财产 | 说明 |
---|---|
LongDatePattern | 定义结果字符串的日期组件的格式。 |
ShortTimePattern | 定义结果字符串的时间组件的格式。 |
DayNames | 定义可在结果字符串中显示的本地化日期名称。 |
MonthNames | 定义可在结果字符串中显示的本地化月份名称。 |
TimeSeparator | 定义分隔时间的小时、分钟和秒部分的字符串。 |
AMDesignator | 定义一个字符串,该字符串指示从午夜到中午 12 小时制之前的时间。 |
PMDesignator | 定义一个字符串,该字符串指示在 12 小时制中从中午到午夜之前的时间。 |
下面的示例使用“f”格式说明符来显示日期和时间值。
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
Dim date1 As Date = #4/10/2008 6:30AM#
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”格式说明符来显示日期和时间值。
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
Dim date1 As Date = #4/10/2008 6:30AM#
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.ShortDatePattern 和 DateTimeFormatInfo.ShortTimePattern 属性返回的自定义格式说明符可能无法使用所有属性。
财产 | 说明 |
---|---|
ShortDatePattern | 定义结果字符串的日期组件的格式。 |
ShortTimePattern | 定义结果字符串的时间组件的格式。 |
DateSeparator | 定义分隔日期的年、月和日部分的字符串。 |
TimeSeparator | 定义分隔时间的小时、分钟和秒部分的字符串。 |
AMDesignator | 定义一个字符串,该字符串指示从午夜到中午 12 小时制之前的时间。 |
PMDesignator | 定义一个字符串,该字符串指示在 12 小时制中从中午到午夜之前的时间。 |
下面的示例使用“g”格式说明符来显示日期和时间值。
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
Dim date1 As Date = #4/10/2008 6:30AM#
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.ShortDatePattern 和 DateTimeFormatInfo.LongTimePattern 属性返回的自定义格式说明符可能无法使用所有属性。
财产 | 说明 |
---|---|
ShortDatePattern | 定义结果字符串的日期组件的格式。 |
LongTimePattern | 定义结果字符串的时间组件的格式。 |
DateSeparator | 定义分隔日期的年、月和日部分的字符串。 |
TimeSeparator | 定义分隔时间的小时、分钟和秒部分的字符串。 |
AMDesignator | 定义一个字符串,该字符串指示从午夜到中午 12 小时制之前的时间。 |
PMDesignator | 定义一个字符串,该字符串指示在 12 小时制中从中午到午夜之前的时间。 |
下面的示例使用“G”格式说明符来显示日期和时间值。
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
Dim date1 As Date = #4/10/2008 6:30AM#
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”标准格式说明符表示使用保留时区信息的模式的自定义日期和时间格式字符串,并发出符合 ISO8601 的结果字符串。 对于 DateTime 值,此格式说明符旨在保留日期和时间值以及文本中的 DateTime.Kind 属性。 如果 styles
参数设置为 DateTimeStyles.RoundtripKind,则可以使用 DateTime.Parse(String, IFormatProvider, DateTimeStyles) 或 DateTime.ParseExact 方法分析格式化字符串。
“O”或“o”标准格式说明符对应于“yyyy'-'MM'-'dd'T'HH':'mm':'ss'”。用于 DateTime 值的 fffffffK“自定义格式字符串和”yyyy'-'MM'-'dd'T'HH':'mm':'ss'”。DateTimeOffset 值的 fffffffzzz“自定义格式字符串。 在此字符串中,分隔单个字符的单引号对,如连字符、冒号和字母“T”,表示单个字符是无法更改的文本。 撇号不会显示在输出字符串中。
“O”或“o”标准格式说明符(以及“yyyy'-'MM'-'dd'T'HH':'mm':'ss'”。fffffffK“自定义格式字符串)利用 ISO 8601 表示时区信息的三种方法来保留 DateTime 值的 Kind 属性:
DateTimeKind.Local 日期和时间值的时区组件是 UTC 的偏移量(例如,+01:00、-07:00)。 所有 DateTimeOffset 值也以此格式表示。
DateTimeKind.Utc 日期和时间值的时区组件使用“Z”(表示零偏移量)来表示 UTC。
DateTimeKind.Unspecified 日期和时间值没有时区信息。
由于“O”或“o”标准格式说明符遵循国际标准,使用说明符的格式设置或分析操作始终使用固定区域性和公历。
传递给 Parse
、TryParse
、ParseExact
和 TryParseExact
DateTime 和 DateTimeOffset 方法的字符串可以使用“O”或“o”格式说明符(如果它们采用以下格式之一)进行分析。 对于 DateTime 对象,你调用的分析重载还应包含一个 styles
参数,其值为 DateTimeStyles.RoundtripKind。 请注意,如果使用与“O”或“o”格式说明符对应的自定义格式字符串调用分析方法,则不会获得与“O”或“o”相同的结果。 这是因为使用自定义格式字符串分析方法无法分析缺少时区组件的日期和时间值的字符串表示形式,也不能使用“Z”来指示 UTC。
以下示例使用“o”格式说明符在美国太平洋时区的系统上显示一系列 DateTime 值和 DateTimeOffset 值。
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
Module Example
Public Sub Main()
Dim dat As New Date(2009, 6, 15, 13, 45, 30,
DateTimeKind.Unspecified)
Console.WriteLine("{0} ({1}) --> {0:O}", dat, dat.Kind)
Dim uDat As New Date(2009, 6, 15, 13, 45, 30, DateTimeKind.Utc)
Console.WriteLine("{0} ({1}) --> {0:O}", uDat, uDat.Kind)
Dim lDat As New Date(2009, 6, 15, 13, 45, 30, DateTimeKind.Local)
Console.WriteLine("{0} ({1}) --> {0:O}", lDat, lDat.Kind)
Console.WriteLine()
Dim dto As New DateTimeOffset(lDat)
Console.WriteLine("{0} --> {0:O}", dto)
End Sub
End Module
' 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
方法还原原始日期和时间值。
// 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.
' Round-trip DateTime values.
Dim originalDate, newDate As Date
Dim dateString As String
' Round-trip a local time.
originalDate = Date.SpecifyKind(#4/10/2008 6:30AM#, DateTimeKind.Local)
dateString = originalDate.ToString("o")
newDate = Date.Parse(dateString, Nothing, DateTimeStyles.RoundtripKind)
Console.WriteLine("Round-tripped {0} {1} to {2} {3}.", originalDate, originalDate.Kind, _
newDate, newDate.Kind)
' Round-trip a UTC time.
originalDate = Date.SpecifyKind(#4/12/2008 9:30AM#, DateTimeKind.Utc)
dateString = originalDate.ToString("o")
newDate = Date.Parse(dateString, Nothing, DateTimeStyles.RoundtripKind)
Console.WriteLine("Round-tripped {0} {1} to {2} {3}.", originalDate, originalDate.Kind, _
newDate, newDate.Kind)
' Round-trip time in an unspecified time zone.
originalDate = Date.SpecifyKind(#4/13/2008 12:30PM#, DateTimeKind.Unspecified)
dateString = originalDate.ToString("o")
newDate = Date.Parse(dateString, Nothing, DateTimeStyles.RoundtripKind)
Console.WriteLine("Round-tripped {0} {1} to {2} {3}.", originalDate, originalDate.Kind, _
newDate, newDate.Kind)
' Round-trip a DateTimeOffset value.
Dim originalDTO As New DateTimeOffset(#4/12/2008 9:30AM#, New TimeSpan(-8, 0, 0))
dateString = originalDTO.ToString("o")
Dim newDTO As DateTimeOffset = DateTimeOffset.Parse(dateString, Nothing, DateTimeStyles.RoundtripKind)
Console.WriteLine("Round-tripped {0} to {1}.", originalDTO, 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”格式说明符在美国太平洋时区的系统上显示 DateTime 和 DateTimeOffset 值。
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
Dim date1 As Date = #4/10/2008 6:30AM#
Dim dateOffset As 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”格式说明符在美国太平洋时区的系统上显示 DateTime 和 DateTimeOffset 值。
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToString("s"));
// Displays 2008-04-10T06:30:00
Dim date1 As Date = #4/10/2008 6:30AM#
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 值转换为 UTC,然后才能设置其格式。 相比之下,DateTimeOffset 值自动执行此转换;无需在格式设置作之前调用 DateTimeOffset.ToUniversalTime 方法。
下面的示例使用“u”格式说明符来显示日期和时间值。
DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToUniversalTime().ToString("u"));
// Displays 2008-04-10 13:30:00Z
Dim date1 As Date = #4/10/2008 6:30AM#
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”格式说明符来显示日期和时间值。
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
Dim date1 As Date = #4/10/2008 6:30AM#
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”格式说明符来显示日期和时间值。
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
Dim date1 As Date = #4/10/2008 6:30AM#
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”格式说明符来显示日期和时间值。
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
Dim date1 As Date = #4/10/2008 6:30AM#
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”格式说明符来显示日期和时间值。
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
Dim date1 As Date = #4/10/2008 6:30AM#
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”格式说明符来显示日期和时间值。
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
Dim date1 As Date = #4/10/2008 6:30AM#
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 属性的相应日期和时间格式模式来更改某些标准日期和时间格式说明符生成的结果。