Отформатируйте DateTime, используя строку формата управления содержимым средства выбора даты Microsoft Word.

Элемент управления содержимым средства выбора даты в Microsoft Word (который можно добавить в документ через скрытую по умолчанию ленту разработчика) использует строки форматирования даты / времени, которые немного несовместимы с DateTime.ToString. Например:

М / д / гггг ч: мм утра / вечера

Если я использую тот же формат в DateTime.ToString:

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

Результат "13.11.2014 12:00 a0/p0". Ожидаемый результат - это то, что Word отображает: "13.11.2014, 12:00 PM" (да, "PM" пишется с большой буквы).

Существует ли безопасный способ использовать формат даты, извлеченный из элемента управления содержимым Word, для форматирования даты в C#?

2 ответа

Здесь нет am или же pm в качестве пользовательских спецификаторов формата даты и времени.

Вам нужно использовать "tt" Пользовательский формат спецификатора, который представляет весь AM / PM обозначение вашего CurrentCulture,

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

Ваша программа считает, что ваша a а также p символы как буквенный разделитель строк и m Спецификатор для минут. Так как ваша минутная цифра вашего DateTime является 0, ваш am / pm будет a0 / p0

И запомни, "/" Специальный спецификатор формата имеет особое значение заменить меня на текущую культуру или поставляемый разделитель даты культуры. Это означает, что если ваш CurrentCulture "s DateSeparator не является /, ваш результат будет иметь ваш текущий разделитель даты, а не /,

Если вы просто хотите установить значение элемента управления содержимым даты в 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 обрабатывает присвоение даты как изменение значения и, таким образом, форматирует дату.

Другие вопросы по тегам