Microsoft Word的日期选择器内容控件(您可以通过默认隐藏的Developer功能区添加到文档中)使用与DateTime.ToString稍微不兼容的日期/时间格式字符串。例如:
如果我在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#中的日期?
答案 0 :(得分:1)
没有am
或pm
作为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")
您的程序认为您的a
和p
个字符是字面字符串分隔符,而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将日期分配视为值更改,从而重新格式化日期。