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

Форматирам дата:

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

Искам да сложа думата "at" след "d", но не искам низът да го форматира. Просто искам думата "в".

Как мога да постигна това?


person williamsandonz    schedule 30.03.2013    source източник


Отговори (4)


Можете да оградите буквалните низове с кавички, което за по-дълги низове вероятно е по-лесно и малко по-четливо, отколкото да избягвате всеки знак с обратна наклонена черта:

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

Вижте Персонализирани низове за формат на дата и час в библиотеката на MSDN (потърсете „Literal“ разделител на низове").

(И имахте предвид h:mm вместо m:mm?)

person Michael Liu    schedule 30.03.2013
comment
Това решение работи най-добре за мен, другите отговори не ми позволиха да използвам множество блокове от {}.. - person williamsandonz; 31.03.2013
comment
(Или може би дори H:mm с главно H?) - person Jeppe Stig Nielsen; 31.03.2013

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

Обърнете внимание на двойното екраниране - използвах низ varbatim, така че успях да напиша \ вътре в низа като нормален знак. След това рутината за форматиране за DateTime интерпретира това (отново) като последователност за изход.

Ето един по-прост вариант:

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

Първият вариант може да се сметне за отвратителен от някои. Последното обаче е много ясно за четене.

person usr    schedule 30.03.2013
comment
+1 Опитвах се да отговоря с string str = String.Format("{0:MMM} at {1:d m:mm"+yearStr+"}", dt, dt);, но мисля, че твоят е по-добър. - person Steve; 31.03.2013
comment
@MuhammadKashifNadeem може да работи, но не ме интересува. Искам да съм сигурен, че е правилен и искам да е последователен. - person usr; 31.03.2013

Просто за забавление, но работи.

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, който искате да поставите между два формата, също е параметризиран.

person Ken Kin    schedule 30.03.2013

Използване на интерполация на низове (C# 6.0+): (документация)

var yearStr = "2018";
var dt = DateTime.Now;
var str = $"{dt:MMM d \'at\' H:mm} {yearStr}";

Обратно наклонената черта не е задължителна

var str = $"{dt:MMM d 'at' H:mm} {yearStr}";

вижте в действие: DotnetFiddle

person Samuel Diogo    schedule 23.05.2018