Попытка преобразовать строку в дату и время в другом формате, чем строка - PullRequest
2 голосов
/ 10 июня 2011

Так что мне пришлось конвертировать дату в формате (ММ-дд-гггг) в (дд-МММ-гггг). То, что я в итоге сделал, это ...

string strProvisionalDate = "04-22-2001";
string strFormat = "MM-dd-yyyy";
DateTime dtProvisional;
DateTime.TryParseExact(strProvisionalDate, strFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dtProvisional);
string strProvisionalDateConverted = dtProvisional.ToString("dd-MMM-yyyy");
string strFormatConverted = "dd-MMM-yyyy";
DateTime dtProvisionalConverted;
DateTime.TryParseExact(strProvisionalDateConverted, strFormatConverted, CultureInfo.InvariantCulture, DateTimeStyles.None, out dtProvisionalConverted);

По сути, я преобразовал его в DateTime, преобразовал его в строку в нужном мне формате, а затем преобразовал обратно в DateTime. Это работает, но мне было любопытно спросить, есть ли лучший способ сделать это ... это не кажется очень изящным.

edit: Оказывается, в этом случае dtProvisional и dtProvisionalConverted оказываются одинаковыми. Итак, мой новый вопрос: как я могу преобразовать строку в формате MM-dd-YYYY в DateTime в формате dd-MMM-yyyy? dtProvisional входит в базу данных SQL, и он должен быть в формате даты.

Ответы [ 2 ]

5 голосов
/ 10 июня 2011

Объект DateTime не хранит дату / время в формате, он хранит их в виде числа тиков, начиная с эпохи. Не должно быть никакой разницы между dtProvisional и dtProvisionalConverted DateTime как объектом (их неопределяемое значение должно быть одинаковым). Формат строки всегда можно изменить при выводе DateTime в строку, используя функцию String Format.

См. Раздел примечаний в этой статье MSDN .

Я правильно отформатирую вашу дату для вывода:

String.Format ("{0: дд-МММ-гггг}", дт);

0 голосов
/ 07 июля 2011

искал детали в похожей строке ...., которая работала для меня ....

DateTime IncentiveDate;
    /// <summary>
    /// Input Format: ddMMyy eg. 070711
    /// Output Format: dd-MMM-YYYY eg. 07-JUL-2011
    /// </summary>
    public string IncentiveDateAsString
    {
        set
        {
            DateTime.TryParseExact(value, "ddMMyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out IncentiveDate);
        }
        get
        {
            return IncentiveDate.ToString("dd-MMM-yyyy");
        }
    }
...