Як конвертувати 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

якщо у вас є дата в рядку з форматом "ddMMyyyy" і хочете перетворити її на "yyyyMMdd", ви можете зробити так:

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

4
Затримався з вашим кодом, цей добре працював DateTime.TryParse (stringValue, out outputInDateTime);
DJ

64

Час розбору:

Щоб проаналізувати DateTime, використовуйте один із наступних методів:

Крім того, ви можете скористатись шаблоном спробувати

Детальніше про користувацькі рядки дати та часу .

Перетворення DateTime у рядок:

Щоб повернути DateTime у вигляді рядка у форматі "yyyyMMdd", ви можете використовувати 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

Рядок до формату дати у рр-р-ММ-ДД: Приклад:

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

немає його рядок з yyyy / mm / dd, і мені це потрібно у форматі yyyyMMdd

Якщо вам потрібно лише видалити штрихи з рядка, чи не просто ви їх замінили?

Приклад:

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

myDateString тепер має бути "20130328".

Менше надмірності :)


3

Це простий спосіб перетворення у формат

 DateTime.Now.ToString("yyyyMMdd");

2

Виходячи з назв властивостей, схоже, ви намагаєтесь перетворити рядок у дату за призначенням:

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

Можливо, це пов'язано з поточною культурою інтерфейсу, і тому він не може правильно інтерпретувати рядок дат при призначенні.


ні його рядок з yyyy / mm / dd, і мені це потрібно у форматі yyyyMMdd
Ashutosh

і під час виконання заявникаAuxillaryRecord.TPOCDate2 = tpoc2 [0] .ToString ("yyyyMMdd"); це дає деякі помилки побудови. Найкращий збіг методу перевантаження для 'string.ToString (System.IFormatProvider)' має деякі невірні аргументи
Ашутош

@Matt - справді? Ви відредагували відповідь за 4 роки, яка навіть не була позначена як відповідь, щоб додати вкладку? Це серйозний поганий випадок OCD у вас там.
Петро


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 - швидше waaaaay !!!
Кошера
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.