Преобразование кодов форматирования даты в дату

Предполагается, что пользователь вводит дату в формате: %m %d %Y

Что мне нужно сделать, так это преобразовать дату в: 11 11 2013 (это сегодняшняя дата). Я мало работал с датами. Есть ли какой-то метод, который делает это преобразование из коробки? Я просмотрел варианты DateTime, но не смог найти то, что мне нужно.

Редактировать:

Из полученных ответов кажется, что не очень понятно, о чем я спрашиваю.

В нашем ПО пользователь может вставлять даты в следующем формате:

http://ellislab.com/expressionengine/user-guide/templates/date_variable_formatting.html

Я пытаюсь проанализировать этот пользовательский ввод и вернуть сегодняшнюю дату. Итак, по ссылке выше:

%m - месяц - от «01» до «12»

%d - день месяца, 2 цифры с ведущими нулями - от "01" до "31"

%Y - год, 4 цифры - «1999»

Мне было интересно, есть ли метод, который принимает %m %d %Y в качестве входных данных и возвращает соответствующую сегодняшнюю дату в указанном формате (то есть 11 11 2013 сегодня). Или хотя бы что-то близкое к этому. Надеюсь, теперь стало понятнее.

РЕДАКТИРОВАТЬ 2:

Покопавшись еще немного, я обнаружил, что то, что я ищу, является эквивалентом С++ strftime в С#.

http://www.cplusplus.com/reference/ctime/strftime/

Но по какой-то причине я не вижу примера, реализованного на С#.


person Mdb    schedule 11.11.2013    source источник
comment
Что означает знак процента?   -  person Tim Schmelter    schedule 11.11.2013
comment
Я немного смущен тем, что вы здесь ищете. У вас возникли проблемы с разбором их даты? У вас возникли проблемы с выводом вашего? Даты ввода и вывода выглядят так, как будто они (или могут быть) в одном и том же формате. Или вы хотите конвертировать в формат dd MM yyyy? 11 ноября - не очень хорошая дата для демонстрации желаемого формата даты...   -  person Chris    schedule 11.11.2013
comment
Ваш вопрос все еще немного не ясен. Вы просто хотите вывести дату СЕГОДНЯ в динамически определяемом формате?   -  person Stachu    schedule 11.11.2013
comment
Дайте нам какой-нибудь псевдокод того, что вводится/выводится. Это очень поможет в решении вашей проблемы; просто очень непонятно, чего вы хотите.   -  person Stachu    schedule 11.11.2013
comment
String.Format() действительно кажется вам лучшим выбором. Сейчас я вижу редактирование 2, и мне все еще кажется, что это ваш лучший ответ.   -  person Stachu    schedule 11.11.2013
comment
Mdb, вы нашли способ сделать это. Я точно на том же месте!   -  person MCS    schedule 27.09.2016


Ответы (3)


Мои переходы к вводу и выводу DateTime:

http://www.dotnetperls.com/datetime-parse для ввода (анализа)

http://www.csharp-examples.net/string-format-datetime/ для вывода (форматирования)

string dateString = "01 01 1992";
string format = "MM dd yyyy";

DateTime dateTime = DateTime.ParseExact(dateString, format, CultureInfo.InvariantCulture);

Отредактируйте, поскольку его редактирование делает мой ответ выше неактуальным (но оставит его для справки):

Из того, что вы говорите, вы хотите вывести сегодняшнюю дату в динамически определяемом формате?

То есть, если я хочу увидеть месяц, число, год, я говорю «ММ дд ГГ», и вы возвращаете мне его?

If so:

DateTime dt = DateTime.Today; // or initialize it as before, with the parsing (but just a regular DateTime dt = DateTime.Parse() or something quite similar)

Затем

String formatString = "MM dd YY";
String.Format("{0:"+ formatString+"}", dt);

Однако ваш вопрос все еще совершенно неясен.

person Stachu    schedule 11.11.2013
comment
Понял это после того, как выложил. Добавил немного пояснений; это было плохо с моей стороны, чтобы просто опубликовать ссылку. Конкретно посмотрите ссылку на разбор! Это действительно должно быть все, что вам нужно. - person Stachu; 11.11.2013
comment
Это не только ответ по ссылке. Это ответ вроде: Если бы вы действительно раньше гуглили, вы бы нашли ЭТО. Я нахожу это полезным для новых укладчиков, чтобы сначала научиться гуглить. - person nabuchodonossor; 11.11.2013
comment
@statue: Я думаю, дело в том, что вы вообще не должны говорить «Посмотрите на ссылку для синтаксического анализа», потому что вся необходимая информация должна быть в вашем ответе. Ссылки должны быть дополнительной информацией (например, как это сделать в других форматах даты) или просто ссылками на источники. - person Chris; 11.11.2013
comment
@nabuchodonossor: это тоже не ответ. Ответ должен содержать информацию, необходимую для ответа на вопрос, а не способ найти эту информацию. Причина, по которой ссылки плохие, заключается в том, что если веб-сайты умирают, реструктурируются и т. д., то ответ становится бесполезным. - person Chris; 11.11.2013
comment
Это имеет смысл. Я думаю, что лучше предоставить как ссылку, так и решение! ;) Мой ответ и другие вместе взятые должны дать такой эффект. - person Stachu; 11.11.2013
comment
@statue: действительно. Я бы хотел, чтобы у других было больше ссылок на страницы (хотя я предпочитаю документацию MSDN). Отредактируйте свой ответ, чтобы сделать его самостоятельным, добавив соответствующий фрагмент кода или что-то в этом роде, и ваш ответ станет в тысячу раз лучше (и вполне может потерять отрицательные голоса). - person Chris; 11.11.2013
comment
Я пойду с сопоставлением этого формата с эквивалентом С#. Так, например, «%b» переходит в «МММ». А затем отформатируйте строку. Ваш ответ где-то рядом с тем, что я буду делать, поэтому я приму его. Спасибо. - person Mdb; 11.11.2013
comment
Дайте мне знать, если у вас есть какие-либо проблемы с ним. Я мог бы помочь больше, я просто не совсем понимаю вопрос, к сожалению. Не стесняйтесь в личку. - person Stachu; 11.11.2013

Вы можете использовать DateTime.TryParseExact для анализа строки на сегодняшний день и DateTime-ToString для преобразования ее обратно в строку с желаемым форматом:

DateTime parsedDate;
if (DateTime.TryParseExact("11 11 2013", "MM dd yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out parsedDate))
{ 
    // parsed successfully, parsedDate is initialized
    string result = parsedDate.ToString("MM dd yyyy", System.Globalization.CultureInfo.InvariantCulture);
    Console.Write(result);
}
person Tim Schmelter    schedule 11.11.2013

Используйте ParseExact:

var date = DateTime.ParseExact("9 1 2009", "M d yyyy", CultureInfo.InvariantCulture);
person Alberto    schedule 11.11.2013