формат DateTime с промежуточным текстом - PullRequest
1 голос
/ 02 апреля 2019

Я хочу отформатировать свой объект DateTime определенным образом.Это основа:

DateTime dt = new DateTime(2018, 11, 20, 15, 30, 5, 0);
Debug.WriteLine(dt.ToString("ddd MMM dd HH:mm:ss zzz yyyy", CultureInfo.InvariantCulture));

Выход будет Tue Nov 20 15:30:05 +01:00 2018.Это почти то, что я хочу: вместо +01:00 я хочу значение string переменной myText.

Так что, если myText имеет значение "hello world", вывод должен быть:

Tue Nov 20 15:30:05 hello world 2018

Поэтому мой вопрос прост: Что мне нужно написать, чтобы получить форматирование (кроме части zzz) , но сзначение переменной string в промежутке?

Я пробовал dt.ToString("ddd MMM dd HH:mm:ss " + myText + " yyyy", CultureInfo.InvariantCulture), но для myText = "hello world" будет выводиться

Tue Nov 20 15:30:05 3ello worl20 2018

т.е.содержимое myText будет считаться форматированием, как и все остальное.Но я хочу, чтобы содержимое myText воспринималось буквально.

Ответы [ 2 ]

5 голосов
/ 02 апреля 2019

Вы можете заключить текст в кавычки ('), и он выведет желаемый формат.

dt.ToString("ddd MMM dd HH:mm:ss '" + myText + "' yyyy", CultureInfo.InvariantCulture);

// output
Tue Apr 02 12:37:49 hello world 2019

Он соответствует h из hello и d из world именно поэтому вы видели этот результат.

Вы можете посмотреть Пользовательские строки формата даты и времени от Microsoft, в которых есть раздел (внизу) о кавычках.Включение кавычек (одинарных ' или двойных ") в формате DateTime (или числовом формате) вводит строковый литерал в результирующий строковый формат.

Как указывает @Dmitry в комментарии,вам может понадобиться использовать myText?.Replace("'", "''"), если в вашей строке появится '.Другой вариант - использовать двойные кавычки и экранировать как обычно:

dt.ToString("ddd MMM dd HH:mm:ss \"" + myText + "\" yyyy", CultureInfo.InvariantCulture);
0 голосов
/ 02 апреля 2019

Было бы приемлемо сделать это с несколькими строками?Я думаю, вы должны быть в состоянии сделать что-то вроде этого:

DateTime dt = new DateTime(2018, 11, 20, 15, 30, 5, 0);
string x = (dt.ToString("ddd MMM dd HH:mm:ss X yyyy", CultureInfo.InvariantCulture));
string z = x.Replace("X", "myText");
Console.WriteLine(x);
Console.WriteLine(Environment.NewLine);
Console.WriteLine(z);

Мы ставим «X» в нашем dt.ToString (), потому что «X» не будет отформатирован и будет служить нашимзаполнитель для замены значения любым пользовательским текстом, который мы хотим после форматирования даты.

...