DateTime XAML 语法

某些控件(例如 CalendarDatePicker)具有使用 DateTime 类型的属性。 虽然通常会在运行时在代码隐藏中指定这些控件的初始日期或时间,但可以在 XAML 中指定初始日期或时间。 WPF XAML 分析器使用内置的 XAML 文本语法对 DateTime 值进行分析。 本主题介绍 DateTime XAML 文本语法的具体内容。

DateTime XAML 语法的使用场合

无需经常对 XAML 中的日期进行设置,而且设置也可能并不合适。 例如,可以使用 DateTime.Now 属性在运行时初始化一个日期,或者可以基于用户输入在代码隐藏中为日历的所有日期进行调整。 但是,有些场景下,可能要硬编码日期到控件模板的 CalendarDatePicker 中。 这些场景必须使用 DateTime XAML 语法。

DateTime XAML 语法是本机行为

DateTime 是在 CLR 基类库中定义的类。 由于基类库与 CLR 其余部分的关联方式的原因,不可能将 TypeConverterAttribute 应用于该类,也不可能在运行时对象模型中使用类型转换器处理 XAML 中的字符串并将它们转换为 DateTime。 没有提供转换行为的 DateTimeConverter 类;本主题中描述的转换行为源于 WPF XAML 分析器。

DateTime XAML 语法的格式字符串

可通过格式字符串指定 DateTime 的格式。 格式字符串会规范可用于创建值的文本语法。 现有 WPF 控件的 DateTime 值通常只使用 DateTime 的日期部分,而不使用时间部分。

当指定 XAML 中的 DateTime 时,可以交替使用任何格式字符串。

还可以使用未在本主题中专门显示的格式和格式字符串。 从技术上讲,指定并由 WPF XAML 分析器分析的任何 DateTime 值的 XAML 使用对 DateTime.Parse 的内部调用,因此可以将 DateTime.Parse 接受的任何字符串用于 XAML 输入。 有关详细信息,请参阅 DateTime.Parse

重要

DateTime XAML 语法在其本机转换中始终将 en-us 用作 CultureInfo。 这不会受 XAML 中 Language 值或 xml:lang 值的影响,因为 XAML 属性级别的类型转换可在没有该上下文的情况下执行。 出于区域性差异的原因,请不要尝试插入此处所示的格式字符串,例如,日期和月份的显示顺序。 此处所示的格式字符串是在分析 XAML 时(不考虑其他区域性设置)使用的确切格式字符串。

以下部分介绍了一些常见的 DateTime 格式字符串。

短日期模式(“d”)

下面显示 XAML 中 DateTime 的短日期格式:

M/d/YYYY

这是最简单的形式,可指定 WPF 控件一般使用的所有必要信息,并且不受针对时间部分的偶然时区偏移的影响,因此比其他格式更适用。

例如,若要指定日期 2010 年 6 月 1 日,可使用以下字符串:

3/1/2010

有关详细信息,请参阅 DateTimeFormatInfo.ShortDatePattern

可排序 DateTime 模式(“s”)

下面显示 XAML 中可排序的 DateTime 模式:

yyyy'-'MM'-'dd'T'HH':'mm':'ss

例如,若要指定日期 2010 年 6 月 1 日,可使用以下字符串(时间部分全部输入为 0):

2010-06-01T000:00:00

RFC1123 模式(“r”)

RFC1123 模式很有用,因为它可以是来自其他日期生成器的字符串输入,这些字符生成器出于区域性固定原因同样使用 RFC1123 模式。 下面显示 XAML 中的 RFC1123 DateTime 模式:

ddd, dd MMM yyyy HH':'mm':'ss 'UTC'

例如,若要指定日期 2010 年 6 月 1 日,可使用以下字符串(时间部分全部输入为 0):

Mon, 01 Jun 2010 00:00:00 UTC

其他格式和模式

如上所述,XAML 中的 DateTime 可以指定为任何可接受作为 DateTime.Parse 输入的字符串。 这包括其他正式化格式(例如 UniversalSortableDateTimePattern)以及未正式化为特定 DateTimeFormatInfo 形式的格式。 例如,窗体 YYYY/mm/dd 可以作为 DateTime.Parse 的输入。 本主题并没有试图介绍所有可能有效的格式,而是推荐将短日期模式作为一种标准做法。

另请参阅