2014-11-12 13 views
-6

Мне нужно преобразовать дату (yyyy-MM-dd). Ниже приведен код, который я пробовал, но он дает мне исключение.Преобразование строки в формат даты

string date = "20141021"; 
DateTime myDate = DateTime.ParseExact(date ,"yyyy-MM-dd", 
             CultureInfo.InvariantCulture); 

Как вы можете видеть DateTime ожидает моя строка следовать "2014-10-21" шаблону. Но я не могу изменить свою строку. Можно ли преобразовать строку date: "20141021" в формат yyyy-MM-dd?

+1

'' yyyy-MM-dd "' определяет формат. Просто сообщите синтаксическому анализатору, что вы передаете дату форматирования 'yyyyMMdd'. –

ответ

4

Как насчет изменения формата даты до фактического формата вашей строки? ParseExact требует точного представление формата, который вы вводите.

Таким образом, решение должно изменить yyyy-MM-dd на yyyyMMdd.

string date = "20141021"; 
DateTime myDate = DateTime.ParseExact(date, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture); 
+1

Не забудьте дать более подробное объяснение? –

+1

@Shqiptar_Programmer: Как? Документация 'ParseExact' и имя метода дают достаточно четкое представление о необходимости быть точным, и я думаю, что мой ответ достаточно объясняет это. –

1

Когда вы пытаетесь отформатировать дату и время, программа будет искать символы «-» в строке, которую вы создали.

Вы можете исправить эту проблему, используя символ «-» в вашей строке (это лучшее решение, на мой взгляд). Это будет выглядеть следующим образом:

string date = "2014-10-21"; 

Или вы можете просто удалить "-" символы на

DateTime.ParseExact(date ,"yyyy-MM-dd" 

части.

Так это будет выглядеть следующим образом

string date = "20141021"; 
      DateTime myDate = DateTime.ParseExact(date ,"yyyyMMdd", 
             System.Globalization.CultureInfo.InvariantCulture); 
2

Вам нужно разобрать строку на сегодняшний день, как:

DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture); 
0

Если это абсолютно необходимо, чтобы иметь 20141021 быть отформатирован 2014-10-21 вы можете сделать следующее:

string date = "20141021"; 
string year = date.Substring(0, 4); 
string month = date.Substring(4, 2); 
string day = date.Substring(6, 2); 

string formatted = year + "-" + month + "-" + day; 

DateTime myDate = DateTime.ParseExact(formatted,"yyyy-MM-dd", 
           System.Globalization.CultureInfo.InvariantCulture); 

В противном случае ответы, приведенные выше, wi Я дам вам то, что вы ищете.

1

Вы можете использовать следующий код ....

string date = "20141021"; 
    DateTime myDate = DateTime.ParseExact(date, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture); 
    string finaldate = myDate.ToString("yyyy-MM-dd"); 
1

Я знаю, что это слишком поздно, но так как OP пользователь хочет некоторые объяснения ..

Я хочу строковое значение конвертировать дату (yyyy-MM-dd). Ниже код, который я пробовал, но он дает мне исключение.

Да потому, что от DateTime.ParseExact

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

В вашем случае это не так. 20141021 отличается от yyyy-MM-dd. Это должен быть формат yyyyMMdd, который точно соответствует вашей строке.

Как вы можете видеть, DateTime ожидает, что моя строка будет следовать шаблону «2014-10-21» . Но я не могу изменить мою струну

Но вы всегда можете изменить свой формат yyyyMMdd

string date = "20141021"; 
DateTime myDate = DateTime.ParseExact(date,"yyyyMMdd", 
             CultureInfo.InvariantCulture); 

Можно ли преобразовать дату строки: «20141021» в YYYY-MM-DD формат?

Нет такой строки даты. Существует string и есть DateTime. 20141021 - string и yyyy-MM-dd - это строковый формат, который вы хотите проанализировать с помощью этой строки с номером DateTime.

A DateTime не имеет любой неявный формат. Он имеет только дату и время. String представления DateTime могут иметь форматы.

+0

+1 Никогда не поздно. И разъяснение не было запрошено ОП, а другим ответчиком. OP отсутствует. –

+1

@PatrickHofman Upss. Я думал, что ОП - это просьба разъяснить ':)' Исправлено. –

+1

Нет проблем. Он сообщил, что сразу после публикации своего ответа, поэтому я думаю, что он просто хотел продвигать свои собственные. –

Смежные вопросы