使用Microsoft Word日期选择器内容控件格式字符串格式化DateTime

时间:2014-11-11 19:13:15

标签: c# datetime ms-word datetime-format datetime-parsing

Microsoft Word的日期选择器内容控件(您可以通过默认隐藏的Developer功能区添加到文档中)使用与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#中的日期?

2 个答案:

答案 0 :(得分:1)

没有ampm作为custom date and time format说明符。

您需要使用代表"tt" custom format specifier的整个AM / PM指定符的CurrentCulture

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

您的程序认为您的ap个字符是字面字符串分隔符,而m specifier是几分钟。由于您DateTime的单个数字分钟为0,因此am / pm将为a0 / p0

请记住,"/" custom format specifier具有使用当前文化或提供的文化日期分隔符替换我的特殊含义。这意味着如果您的CurrentCulture DateSeparator不是/,您的结果将包含当前日期分隔符,而不是/

答案 1 :(得分: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将日期分配视为值更改,从而重新格式化日期。