Подтвердить что ты не робот

Как поместить необработанные (экранированные) слова внутри String.Format

Я форматирую дату:

str = String.Format("{0:MMM d m:mm"+yearStr+"}", dt);

Я хочу поставить слово "at" после "d", но я не хочу, чтобы строка отформатировала его. Я просто хочу слово "at".

Как я могу это достичь?

4b9b3361

Ответ 1

Вы можете окружать литеральные строки кавычками, которые для более длинных строк, вероятно, проще и немного более читабельны, чем экранирование каждого символа с обратной косой чертой:

str = String.Format("{0:MMM d 'at' m:mm"+yearStr+"}", dt);

См. Пользовательские строки формата даты и времени в библиотеке MSDN (найдите "Литеральный разделитель строк" ).

(И вы имели в виду h:mm вместо m:mm?)

Ответ 2

string.Format(@"{0:MMM d \a\t m:mm" + yearStr + "}", dt);

Обратите внимание на двойное экранирование - я использовал строку varbatim, поэтому я смог написать \ внутри строки как обычный символ. Процедура форматирования для DateTime затем интерпретирует это (снова) как escape-последовательность.

Вот более простой вариант:

string.Format("{0:MMM d} at {0:m:mm" + yearStr + "}", dt);

Первый вариант может считаться отвратительным для некоторых. Тем не менее, последнее очень ясно читать.

Ответ 3

Просто для удовольствия, но работает.

var what=new object[] { "{{{{0:MMM d}}}} {0} {{{{0:m:mm:{{0}}}}}}", "at", yearStr, dt };
var that=what.Aggregate((a, b) => String.Format((String)a, b));

Вы можете объединить две строки в одну. Параметр at, который вы хотите установить между двумя форматами.