2016-04-25 1 views
-3

Я хочу конвертировать dd/MM/YYYY отформатированная строка даты до YYYY-MM-dd datetime. Но он возвращается ко мнеКак преобразовать дату в формате dd/MM/YYYY в формате YYYY-MM-dd datetime?

«String не был признан действительным DateTime».

Как я могу конвертировать из строки «04/26/2016» в формат даты и времени yyyy-MM-dd?

DateTime dt = DateTime.ParseExact("04/26/2016", "yyyy-MM-dd", CultureInfo.InvariantCulture); 
Console.WriteLine(dt); 
+4

'ParseExact (" 04/26/2016 "," yyyy-MM-dd "' <- определить ошибку? –

ответ

9

Вы разбираете строку с датой неверно. Вы должны:

DateTime dt = DateTime.ParseExact("04/26/2016", "MM/dd/yyyy", CultureInfo.InvariantCulture); 
Console.WriteLine(dt.ToString("yyyy-MM-dd")); 
+0

Это просто совершенно неправильно. '-' и'/'не соответствуют друг другу. –

+0

FYI, я _really_ люблю использовать 'InvariantCulture' в' ToString', потому что OP 'CurrentCulture' _might_ не использует' GregorianCalendar' как свойство 'Calendar'. В этом случае этот метод ToString генерирует другой результат, чем '2016-04-16'. –

2

Очевидно, что ваш формат и строка точно не совпадают. От documentation;

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

Вместо этого вы должны использовать формат MM/dd/yyyy.

DateTime dt = DateTime.ParseExact("04/26/2016", "MM/dd/yyyy", CultureInfo.InvariantCulture); 

И если вы хотите получить его строковое представление с форматом yyyy-MM-dd, просто использовать ToString метод, как;

Console.WriteLine(dt.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)); 

Имейте в виду, что нет YYYY как формат дат. Поскольку эти спецификаторы чувствительны к регистру, вместо этого вы должны использовать yyyy format specifier.

1

Попробуйте этот путь

DateTime dt = DateTime.ParseExact("04/26/2016", "MM/dd/yyyy", CultureInfo.InvariantCulture); 
Console.WriteLine(dt.ToString("yyyy-MM-dd")); 
+0

вы используете неправильный формат для синтаксического анализа, нет месяца с номером 26 –

+0

@PatrickHofman. Это было похоже на 'dd/MM/yyyy' в первой ревизии, но так как OP сменил его так быстро, мы не видели его как ревизию, и это okey сейчас. –

+0

Это было неправильно, возможно, ответ был отредактирован –

2

Технически, вы можете сделать только некоторые струнные манипуляции:

String source = "04/26/2016"; 
String result = String.Join("-", source.Split('/').Reverse()); 

Но DateTime.ParseExact является лучшим решением:

String result = DateTime 
    .ParseExact(source, "MM/dd/yyyy", CultureInfo.InvariantCulture) 
    .ToString("yyyy-MM-dd", CultureInfo.InvariantCulture); 
Смежные вопросы