【问题标题】:Format a DateTime using a Microsoft Word date picker content control format string使用 Microsoft Word 日期选择器内容控制格式字符串格式化 DateTime
【发布时间】:2015-01-08 11:04:46
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    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 具有特殊含义,用当前文化或提供的文化日期分隔符替换我。这意味着如果您的CurrentCultureDateSeparator 不是/,您的结果将使用您当前的日期分隔符,而不是/

    【讨论】:

    • 谢谢,但我正在尝试以编程方式执行此操作。对于“M/d/yyyy h:mm am/pm”的特殊情况,我只需将格式字符串更改为使用“tt”而不是“am/pm”。我的代码需要适用于用户在控件上设置的任何格式。
    • @JoeyAdams 正如我所说,没有 ampm 作为自定义说明符。您仍然可以将它们用作文字字符串分隔符,例如'am''pm',但这对您的情况不利。 tt 说明符会将您的小时部分更改为中午之后或中午之前。比如你的小时17:00h:mm tt代表5:00 PM,如果是11:00h:mm tt代表11:00 AM
    【解决方案2】:

    如果您只是想将 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 将日期分配视为值更改,从而重新格式化日期。

    【讨论】:

      猜你喜欢
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多