判断字符串符合日期格式(标准日期和时间格式字符串)
#2022高考季#标准日期和时间格式字符串(20220626日230720CN),我来为大家科普一下关于判断字符串符合日期格式?以下内容希望对你有帮助!
判断字符串符合日期格式
#2022高考季#
标准日期和时间格式字符串(20220626日230720CN)
https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/standard-date-and-time-format-strings
跳转至主内容
我们使用可选的 Cookie,通过社交媒体连接等方式改善你在我们网站上的体验,并且根据你的在线活动投放个性化的广告。 如果你拒绝可选 Cookie,则我们将仅使用为你提供服务所必须的 Cookie。 你可以单击页面底部的“管理 Cookie”更改你的选择。隐私声明 第三方 Cookie
接受 拒絕 管理 Cookie
- Docs
- 文档
- Learn
- Q&A
- 代码示例
- 节目
- 事件
登录
.NET
- 语言
- 工作负载
- API
- 资源
- 下载 .NET
消除警报
本主题的部分内容可能是由机器翻译。
搜索
- .NET 文档
- 入门
- 概述
- .NET 中的新增功能
- 工具和诊断
- 执行模型
- 部署模型
- DevOps
- 基本编码组件
- 运行时库概述设置数字、日期和其他类型的格式概述标准数字格式字符串自定义数字格式字符串标准日期和时间格式字符串自定义日期和时间格式字符串标准 TimeSpan 格式字符串自定义 TimeSpan 格式字符串枚举格式字符串复合格式设置操作指南使用字符串正则表达式序列化System.CommandLine文件和流 I/OSystem.Console 类依赖关系注入配置日志记录HostBuilder(泛型主机)网络.NET 中的文件通配.NET 中的基元库全球化和本地化.NET 应用中的资源辅助角色服务缓存
- 数据访问
- 并行处理、并发和异步
- 测试
- 安全性
- 高级主题
- 迁移指南
- Docs
- .NET
- .NET 基础知识
C#
使用英语阅读保存
标准日期和时间格式字符串- 项目
- 2022/06/23
- 21 个参与者
标准日期和时间格式字符串使用单个字符作为格式说明符来定义 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:002009-06-15T13:45:30 (DateTimeKind.Utc) --> 2009-06-15T13:45:30.0000000Z2009-06-15T13:45:30 (DateTimeKind.Unspecified) --> 2009-06-15T13:45:30.0000000DateTimeOffset 值:2009-06-15T13:45:30-07:00 --> 2009-06-15T13:45:30.0000000-07:00 |
“R”、“r” |
RFC1123 模式。更多信息:RFC1123(“R”、“r”)格式说明符。 |
2009-06-15T13:45:30 -> Mon, 15 Jun 2009 20:45:30 GMT |
“s” |
可排序日期/时间模式。更多信息:可排序(“s”)格式说明符。 |
2009-06-15T13:45:30 (DateTimeKind.Local) -> 2009-06-15T13:45:302009-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” |
通用完整日期/时间模式。更多信息:通用完整(“U”)格式说明符。 |
2009-06-15T13:45:30 -> Monday, June 15, 2009 8:45:30 PM (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。
- 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” |
None |
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”(短日期模式)标准格式字符串的自定义格式字符串。
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(" {0}", 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
以下几节描述了 DateTime 和 DateTimeOffset 值的标准格式说明符。
日期格式此组包括以下格式:
- 短日期(“d”)格式说明符
- 长日期(“D”)格式说明符
“d”标准格式说明符表示通过特定区域性的 DateTimeFormatInfo.ShortDatePattern 属性定义的自定义日期和时间格式字符串。 例如,由固定区域性的 ShortDatePattern 属性返回的自定义格式字符串为“MM/dd/yyyy”。
下表列出用于控制返回字符串格式的 DateTimeFormatInfo 对象属性。
Property |
描述 |
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 对象的属性。
Property |
描述 |
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”)格式说明符
- 常规日期短时间(“g”)格式说明符
- 常规日期长时间(“G”)格式说明符
- 往返(“O”、“o”)格式说明符
- RFC1123(“R”、“r”)格式说明符
- 可排序(“s”)格式说明符
- 通用可排序(“u”)格式说明符
- 通用完整(“U”)格式说明符
“f”标准格式说明符表示长日期(“D”)和短时间(“t”)模式的组合,由空格分隔。
结果字符串受特定 DateTimeFormatInfo 对象的格式信息的影响。 下表列出了 DateTimeFormatInfo 对象属性,这些属性可控制返回字符串的格式。 由某些区域性的 DateTimeFormatInfo.LongDatePattern 和 DateTimeFormatInfo.ShortTimePattern 属性返回的自定义格式说明符可能未利用所有属性。
Property |
描述 |
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 属性返回的自定义格式说明符可能未利用所有属性。
Property |
描述 |
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.ShortDatePattern 和 DateTimeFormatInfo.ShortTimePattern 属性返回的自定义格式说明符可能未利用所有属性。
Property |
描述 |
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.ShortDatePattern 和 DateTimeFormatInfo.LongTimePattern 属性返回的自定义格式说明符可能未利用所有属性。
Property |
描述 |
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”标准格式说明符表示使用保留时区信息的模式的自定义日期和时间格式字符串,并发出符合 ISO8601 的结果字符串。 对于 DateTime 值,此格式说明符设计用于在文本中将日期和时间值与 DateTime.Kind 属性一起保留。 如果将 DateTime.Parse(String, IFormatProvider, DateTimeStyles) 参数设置为 DateTime.ParseExact,则可通过使用 styles 或 DateTimeStyles.RoundtripKind 方法对设置了格式的字符串进行反向分析。
对于 DateTime 值,“O”或“o”标准格式说明符对应于“yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK”自定义格式字符串,对于 DateTimeOffset 值,“O”或“o”标准格式说明符则对应于“yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'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”标准格式说明符遵循国际标准,使用说明符的格式设置或分析操作始终使用固定区域性和公历。
如果字符串采用了这些格式中的某个格式,则可以通过使用“O”或“o”格式说明符分析传递到 Parse 和 TryParse 的 ParseExact、TryParseExact、DateTime 和 DateTimeOffset 方法的这些字符串。 对于 DateTime 对象,你调用的分析重载还应当包含带有 styles 值的 DateTimeStyles.RoundtripKind 参数。 请注意,如果你使用对应于“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("{0} ({1}) --> {0:O}", dat, dat.Kind);
DateTime uDat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Utc);
Console.WriteLine("{0} ({1}) --> {0:O}", uDat, uDat.Kind);
DateTime lDat = new DateTime(2009, 6, 15, 13, 45, 30,
DateTimeKind.Local);
Console.WriteLine("{0} ({1}) --> {0:O}\n", lDat, lDat.Kind);
DateTimeOffset dto = new DateTimeOffset(lDat);
Console.WriteLine("{0} --> {0:O}", dto);
}
}
// 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 {0} {1} to {2} {3}.", originalDate, originalDate.Kind,
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 {0} {1} to {2} {3}.", originalDate, originalDate.Kind,
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 {0} {1} to {2} {3}.", originalDate, originalDate.Kind,
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 {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 属性(该属性表示固定区域性)返回的 DateTimeFormatInfo.InvariantInfo 对象的下列属性的影响。
Property |
描述 |
RFC1123Pattern |
定义结果字符串的格式。 |
AbbreviatedDayNames |
定义可在结果字符串中出现的缩写的日期名称。 |
AbbreviatedMonthNames |
定义可在结果字符串中出现的缩写的月份名称。 |
尽管 RFC 1123 标准将时间表示为协调世界时 (UTC),格式设置操作也不会修改正在格式化的 DateTime 对象的值。 因此,执行格式设置操作之前,必须通过调用 DateTime 方法将 DateTime.ToUniversalTime 值转换为 UTC。 相反,DateTimeOffset 值自动执行此转换;即执行格式设置操作之前无需调用 DateTimeOffset.ToUniversalTime 方法。
下面的示例使用“r”格式说明符在美国太平洋时区中的系统上显示 DateTime 和 DateTimeOffset 值。
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”格式说明符在美国太平洋时区中的系统上显示 DateTime 和 DateTimeOffset 值。
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 值进行格式设置之前,必须通过调用 DateTime.ToUniversalTime 方法将该值转换为 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 属性返回的自定义格式说明符可能未利用所有属性。
Property |
描述 |
FullDateTimePattern |
定义结果字符串的总体格式。 |
DayNames |
定义可在结果字符串中出现的本地化日名称。 |
MonthNames |
定义可在结果字符串中出现的本地化月份名称。 |
TimeSeparator |
定义分隔时间中小时、分钟和秒钟几个组成部分的字符串。 |
AMDesignator |
定义以 12 小时时钟制表示午夜至正午之前这段时间的字符串。 |
PMDesignator |
定义以 12 小时时钟制表示正午至午夜之前这段时间的字符串。 |
DateTimeOffset 类型不支持“U”格式说明符。如果使用“U”格式说明符来设置 FormatException 值的格式,则将引发 DateTimeOffset。
下面的示例使用“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”)格式说明符
“t”标准格式说明符表示由当前的 DateTimeFormatInfo.ShortTimePattern 属性定义的自定义日期和时间格式字符串。 例如,用于固定区域性的自定义格式字符串为“HH:mm”。
结果字符串受特定 DateTimeFormatInfo 对象的格式信息的影响。 下表列出了 DateTimeFormatInfo 对象属性,这些属性可控制返回字符串的格式。 由某些区域性的 DateTimeFormatInfo.ShortTimePattern 属性返回的自定义格式说明符可能未利用所有属性。
Property |
描述 |
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 属性返回的自定义格式说明符可能未利用所有属性。
Property |
描述 |
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”)格式说明符
- 年月(“Y”、“y”)格式说明符
“M”或“m”标准格式说明符表示由当前的 DateTimeFormatInfo.MonthDayPattern 属性定义的自定义日期和时间格式字符串。 例如,用于固定区域性的自定义格式字符串为“MMMM dd”。
下表列出用于控制返回字符串格式的 DateTimeFormatInfo 对象属性。
Property |
描述 |
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 对象属性。
Property |
描述 |
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 属性的相应日期和时间格式模式,可以更改由某些标准日期和时间格式说明符产生的结果。
请参阅- System.DateTime
- System.DateTimeOffset
- 格式设置类型
- 自定义日期和时间格式字符串
- 示例:.NET Core WinForms 格式设置实用工具 (C#)
- 示例:.NET Core WinForms 格式设置实用工具 (Visual Basic)
建议的内容
- 自定义日期和时间格式字符串
- 了解如何使用自定义日期和时间格式字符串将 DateTime 或 DateTimeOffset 值转换为文本表示形式,或分析日期和时间字符串。
- DateTimeFormatInfo 类 (System.Globalization)
- 提供有关日期和时间值格式的区域性特定信息。
- DateTime.UtcNow 属性 (System)
- 获取一个 DateTime 对象,该对象设置为此计算机上的当前日期和时间,表示为协调通用时间 (UTC)。
- DateTime.ParseExact 方法 (System)
- 将日期和时间的指定字符串表示形式转换为其等效的 DateTime。 字符串表示形式的格式必须与指定的格式完全匹配,否则会引发异常。
显示更多
本文内容
- 格式说明符表
- 标准格式字符串的工作原理
- 日期格式
- 日期和时间格式
显示更多
中文 (简体)主题管理 Cookie旧版文档博客参与隐私和 Cookie使用条款商标© Microsoft 2022
(20220626日231010CN)
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com