0

Microsoft Word 的日期选择器内容控件(您可以通过默认隐藏的开发人员功能区将其添加到文档中)使用与DateTime.ToString稍微不兼容的日期/时间格式字符串。例如:

M/d/yyyy h:mm am/pm

如果我在 DateTime.ToString 中使用相同的格式:

DateTime.Parse("11/13/2014 12:00 PM").ToString("M/d/yyyy h:mm am/pm")

结果是“11/13/2014 12:00 a0/p0”。预期结果是 Word 显示的内容,“11/13/2014 12:00 PM”(是的,PM 大写)。

是否有一种安全的方法可以使用从 Word 内容控件中提取的日期格式来格式化 C# 中的日期?

4

2 回答 2

1

没有ampm作为自定义日期和时间格式说明符。

您需要使用"tt"自定义格式说明符AM,它代表PM您的CurrentCulture.

DateTime.Parse("11/13/2014 12:00 PM").ToString("M/d/yyyy h:mm tt")

您的程序将您的ap字符视为文字字符串分隔符和m说明符是分钟。由于你的个位数分钟DateTime0,你的am / pm将是a0 / p0

请记住,"/"自定义格式说明符具有用当前文化或提供的文化日期分隔符替换我的特殊含义。这意味着如果你CurrentCultureDateSeparator不是/,你的结果将有你当前的日期分隔符,而不是/

于 2014-11-11T19:51:13.497 回答
0

如果您只想将 Word 日期内容控件的值设置为日期,请尊重其格式:

DateTime dt = ...;
ContentControl contentControl = ...;

contentControl.Range.Text = ""; // ensure Word reformats date
contentControl.Range.Text = dt.ToString();

设置内容控件文本属性就像作为用户在内容控件中键入值一样。当您在内容控件中键入日期时,Word 会对其进行解析和重新格式化,或者如果无法解析,则将文本显示为给定。

.Text = ""当分配的日期与控件中已有的日期相同时,这会阻止 Word 使用 .ToString() 给出的格式。我发现当日期选择器内容控件映射到自定义 XML 值时,如果我更改日期,Word 会重新格式化它,但是如果我更改日期的格式(例如将“二月”更改为“二月”甚至更改“星期二”到“星期六”),Word 将保留我的格式。通过首先清除内容控制文本,Word 将日期分配视为值更改,从而重新格式化日期。

于 2014-11-13T19:18:44.163 回答