2013-09-16 24 views
0

Мне нужно преобразовать строчную дату в формате yyyyMMdd в строку даты с форматом MM/dd/yyyy. Что лучше делать?Преобразование даты Строка в другую строку даты в другом формате

Я делаю это:

DateTime.ParseExact(dateString, "yyyyMMdd", CultureInfo.InvariantCulture).ToString("MM/dd/yyyy") 

Но я не уверен, я думаю, что должно быть лучше. Как вы думаете?

+2

Ваш путь - лучший способ, я думаю. –

+1

havent еще думал о лучшем пути, чем это :) –

+3

Есть ли причина, почему вам нужно _reformat_ строку? Звучит так, будто вы на самом деле форматируете «дату-строку» из базы данных, верно? Затем сохраните его как 'datetime' в первую очередь. –

ответ

2

Что вы делаете, это нормально.

Возможно, вы можете улучшить его, используя DateTime.TryParseExact и при успешном анализе отформатировать объект DateTime в другом формате.

string dateString = "20130916"; 
DateTime parsedDateTime; 
string formattedDate; 
if(DateTime.TryParseExact(dateString, "yyyyMMdd", 
        CultureInfo.InvariantCulture, 
        DateTimeStyles.None, 
        out parsedDateTime)) 
{ 
    formattedDate = parsedDateTime.ToString("MM/dd/yyyy"); 
} 
else 
{ 
     Console.WriteLine("Parsing failed"); 
} 
1

Ваш путь полностью OK.You может попробовать сделать это: -

string res = "20130908"; 
DateTime d = DateTime.ParseExact(res, "yyyyMMdd", CultureInfo.InvariantCulture); 
Console.WriteLine(d.ToString("MM/dd/yyyy")); 

Просто для справки из MSDN: -

DateTime.ParseExact (String, String, IFormatProvider) обрабатывает строковое представление даты, которое должно быть в формате , определяемом параметром формата.

+0

Вопрос задает 'yyyyMMdd' ... ваш пример точно такой же, но с' yyyyddMM'? – crashmstr

+0

@crashmstr: - Обновлен мой ответ !!! благодаря –

0
string date = "01/08/2008"; 
DateTime dt = Convert.ToDateTime(date);  //or  
DateTime dt = DateTime.Parse(date, culture, System.Globalization.DateTimeStyles.AssumeLocal); //or  
// create date time 2008-03-09 16:05:07.123 
DateTime dt = new DateTime(2008, 3, 9, 16, 5, 7, 123); //or  

Теперь Формат как вам нравится сdt ...

String.Format("{0:y yy yyy yyyy}", dt); // "8 08 008 2008" year 
String.Format("{0:M MM MMM MMMM}", dt); // "3 03 Mar March" month 
String.Format("{0:d dd ddd dddd}", dt); // "9 09 Sun Sunday" day 
String.Format("{0:h hh H HH}",  dt); // "4 04 16 16"  hour 12/24 
String.Format("{0:m mm}",   dt); // "5 05"   minute 
String.Format("{0:s ss}",   dt); // "7 07"   second 
String.Format("{0:f ff fff ffff}", dt); // "1 12 123 1230" sec.fraction 
String.Format("{0:F FF FFF FFFF}", dt); // "1 12 123 123" without zeroes 
String.Format("{0:t tt}",   dt); // "P PM"   A.M. or P.M. 
String.Format("{0:z zz zzz}",  dt); // "-6 -06 -06:00" time zone 

Формат часть из Начиная с www.csharp-examples.net

0

Ваш код на самом деле лучше (конечно, лучше с помощью TryParseExact), однако выглядит так, как будто ваша строка ввода находится в правильном формате (конвертируется в DateTime), вы просто хотите переформатировать его, я думаю, что использование метода string поможет. Но я хотел бы использовать Regex здесь:

string output = Regex.Replace(input, "^(\\d{4})(\\d{2})(\\d{2})$", "$2/$3/$1"); 
//E.g 
input = "20130920"; 
output = "09/20/2013"; 
Смежные вопросы