Как преобразовать DateTime в / из определенного строкового формата (в обоих направлениях, например, заданный формат «yyyyMMdd»)?


132

У меня проблема с преобразованием даты и времени в строковом формате, но я не могу преобразовать его с помощью "yyyyMMdd"формата.

Мой код:

string tpoc = refSubClaim.BenefitsFolder.BenefitFolderIdNumber.ToString();
string[] tpocinfo = Regex.Split(tpoc,";");

for (int i = 0; i < tpocinfo.Length; i++)
{
    switch (i)
    {
        case 0:
        {
            string[] tpoc2 = Regex.Split(tpocinfo[0], ",");
            claimantAuxillaryRecord.TPOCDate2 = tpoc2[0].ToString();
            claimantAuxillaryRecord.TPOCAmount2 = Convert.ToDecimal(tpoc2[1]);
            claimantAuxillaryRecord.FundingDelayedBeyondTPOCStartDate2 = tpoc2[2].ToString();
        }
        break;

В каком формате сейчас находится строка даты и времени?
Falle1234

11
И какое отношение ваш фрагмент кода к вопросу?
Дарин Димитров

2
Я немного не понимаю; вы работаете со строковым представлением даты или объектом DateTime? Предполагая, что это объект DateTime, вы можете просто вызвать obj.ToString("yyyyMMdd");
Натан Тейлор,

На самом деле TPOCDate2 уже является переменной, и я просто хочу преобразовать элементы в tpoc2 [0] в формат yyyyMMdd. Надеюсь, это ответит на ваш вопрос
Ашутош

Вы застряли где-то?
Дариуш Возняк

Ответы:


224

если у вас есть дата в строке в формате «ддММгггг» и вы хотите преобразовать ее в «ггггММдд», вы можете сделать следующее:

DateTime dt = DateTime.ParseExact(dateString, "ddMMyyyy", 
                                  CultureInfo.InvariantCulture);
dt.ToString("yyyyMMdd");

4
Застрял в вашем коде, этот работал хорошо DateTime.TryParse (stringValue, out outputInDateTime);
DJ '15

64

Дата и время анализа:

Чтобы проанализировать DateTime, используйте один из следующих методов:

В качестве альтернативы вы можете использовать шаблон try-parse :

Узнайте больше о пользовательских форматах даты и времени .

Преобразование DateTime в строку:

Чтобы вернуть DateTime в виде строки в формате «ггггММдд», вы можете использовать ToString метод.

  • Пример фрагмента кода: string date = DateTime.ToString("yyyyMMdd");
  • Примечание верхнего регистр M «ы см месяцев и в нижнем регистре м » с до минут.

Ваш случай:

В вашем случае, если вы не хотите обрабатывать сценарий, когда дата имеет другой формат или отсутствует, было бы наиболее удобно использовать ParseExact:

string dateToParse = "20170506";
DateTime parsedDate = DateTime.ParseExact(dateToParse, 
                                          "yyyyMMdd",
                                          CultureInfo.InvariantCulture);

7
Это старая тема, но для тех, кто ищет, приведенная выше ссылка "формат с учетом культуры" теперь не работает. Вот одна из текущих и информативных строк

40

Вы можете преобразовать свою строку в такое DateTimeзначение:

DateTime date = DateTime.Parse(something);

Вы можете преобразовать DateTimeзначение в форматированную строку следующим образом:

date.ToString("yyyyMMdd");

11

Строка в формате даты yyyy-MM-dd: Пример:

TxtCalStDate.Text = Convert.ToDateTime(objItem["StartDate"]).ToString("yyyy/MM/dd");   

10

Если вы хотите иметь DATE как строку с TIME . Мы можем сделать так:

    //Date and Time is taking as current system Date-Time    
    DateTime.Now.ToString("yyyyMMdd-HHmmss");

7
минуты должны быть маленькими "м"!? "yyyyMMdd-HHmmss"
CeOnSql

6

Используйте, DateTime.TryParseExact()если вы хотите сопоставить с определенным форматом даты

   string format = "yyyyMMdd"; 
    DateTime dateTime;
    DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture,
                                             DateTimeStyles.None, out dateTime);

5

Вы могли бы использовать DateTime.TryParse()вместо DateTime.Parse().
У TryParse()вас есть возвращаемое значение, если оно было успешным, и Parse()вам нужно обработать исключение



3

нет это строка с гггг / мм / дд, и мне нужно в формате ггггMMdd

Если вам нужно только удалить косые черты из строки, не замените ли вы их?

Пример:

myDateString = "2013/03/28";
myDateString = myDateString.Replace("/", "");

myDateString теперь должно быть «20130328».

Меньше перегиба :)



2

Судя по именам свойств, похоже, что вы пытаетесь преобразовать строку в дату путем присвоения:

claimantAuxillaryRecord.TPOCDate2 = tpoc2[0].ToString();

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


нет это строка с гггг / мм / дд, и мне нужно в формате ггггMMdd
Ашутош

и во время выполнения claimantAuxillaryRecord.TPOCDate2 = tpoc2 [0] .ToString ("yyyyMMdd"); это дает некоторые ошибки сборки. Наилучшее перегруженное соответствие метода для 'string.ToString (System.IFormatProvider)' содержит недопустимые аргументы
Ашутош,

@Matt - правда? Вы отредактировали ответ за 4 года, который даже не был отмечен как ответ, чтобы добавить вкладку? Это серьезный и тяжелый случай ОКР.
Питер


0

Более простой способ, с которым я столкнулся при поиске этого ответа;

string date = DateTime.Now.ToString("yyyyMMdd", System.Globalization.CultureInfo.GetCultureInfo("en-US"));

Как насчет того, чтобы у меня была ценность DateTime? Как DateTime newDate = DateTime.Parse(Session["date"].ToString());?
WTFZane

0

Вы можете попробовать эти коды

claimantAuxillaryRecord.TPOCDate2  = Convert.ToDateTime(tpoc2[0]).ToString("yyyyMMdd"); 

Или

claimantAuxillaryRecord.TPOCDate2 = Convert.ToDateTime(tpoc2[0]).ToString("yyyyMMdd hh:mm:ss"); 

1
Ради любви к Богу (наш лорд-спаситель Харамбе) никогда не используйте Convert.ToDateTime ... Эта штука такая медленная (~ 100 мс)! Просто используйте ParseExact или TryParse - дааааай быстрее !!!
Кошера
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.