2013-03-20 5 views
4

Я получил эту строку:C# преобразовать строку даты типа

string date = "Sun, 17 Mar 2013 12:40:23 +0000"; 

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

DateTime dt = Convert.ToDateTime(date); 

А затем пытается получить его в следующих форматах:

dt.ToString("dd") 
dt.ToString("MMMM") 
dt.ToString("yyyy") 
+2

У меня нет исключений при запуске этого кода, и он работает так, как ожидалось. В какой стране вы находитесь? –

+0

У него, вероятно, разные настройки культуры на его ОС, которые представляют даты по-разному. Convert использует их и не анализирует. – alex

+0

, когда у вас есть ошибка? этот же код работал для меня? попробуйте сделать заявление об отладке один раз. –

ответ

3

Попробуйте DateTime.TryParse() или DateTime.Parse()

+0

+1 ты бил меня на 10 секунд. –

+0

Его код отлично работает с тем, что он написал, поэтому не знаю, в чем проблема на самом деле ... Я думаю, что это проблема локали. –

3

Попробуйте использовать DateTime.Parse вместо этого.

var dt = DateTime.Parse(date);

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

DateTime result; 
if (DateTime.TryParse(date, out result)) 
{ 
    Console.WriteLine(result.ToString("dd")); 
    Console.WriteLine(result.ToString("MMMM")); 
    Console.WriteLine(result.ToString("yyyy")); 
} 
else 
{ 
    Console.WriteLine("Error parsing date."); 
} 

Если вы по-прежнему возникают проблемы, возможно, потребуется предоставить DateTime с CultureInfo. Это позволяет указать точную культуру, используемую анализатором, чтобы гарантировать, что настройки области компьютера не вызовут никаких проблем.

DateTime.Parse(date, new CultureInfo("en-US"));  // Specific culture 
DateTime.Parse(date, CultureInfo.InvariantCulture); // Culture-insensitive 

// Culture-insensitive TryParse 
if (DateTime.TryParse(date, out result, CultureInfo.InvariantCulture)) 
{...} 

Обычная дата-время использует культуру, установленную вашей операционной системой.

+1

Yup нуждался в cultinfo, ОС отличался на реальном сервере, чем на локальной машине. – PeteTheGreek

+0

Рад, что вы его отсортировали. – eandersson

1

Вы проверили DateTime.TryParse метод? Если вы прокрутите вниз, вы заметите, что последний образец на самом деле «Fri, 15 мая 2009 20:10:57 GMT», аналогичный вашему запросу.

7

Вы можете использовать DateTime.ParseExact для преобразования.

Попробуйте следующий код:

var date = "Sun, 17 Mar 2013 12:40:23 +0000"; 
var dt = DateTime.ParseExact(date, "ddd, dd MMM yyyy hh:mm:ss zzz", CultureInfo.InvariantCulture); 

Console.WriteLine(dt.ToString("dd")); 
Console.WriteLine(dt.ToString("MMMM")); 
Console.WriteLine(dt.ToString("yyyy")); 

Выход:

17 
March 
2013 
+2

+1 для использования InvariantCulture. Я подозреваю, что это то, что нужно, чтобы заставить его работать. –

1

Вы можете использовать DateTime.Parse() метод, как;

string date = "Sun, 17 Mar 2013 12:40:23 +0000"; 
DateTime dt = DateTime.Parse(date, CultureInfo.InvariantCulture); 
Console.WriteLine(dt.ToString("dd")); 
Console.WriteLine(dt.ToString("MMMM")); 
Console.WriteLine(dt.ToString("yyyy")); 

Выход будет;

17 
March 
2013 

Адрес DEMO.

+0

@ Разрушители оставляют комментарии? –

+0

-1: 'Convert.ToDateTime' часть не хороша, не нужна и совершенно путается. – Jamiec

+0

@Jamiec _Hmm_, вы правы. Обновлено, спасибо! –

2

Вы можете использовать DateTime.Parse с CultureInfo.InvariantCulture, который игнорирует вашу текущую культуру, следовательно, позволяет избежать возможных проблем с локализацией.

DateTime dt = DateTime.Parse(date, CultureInfo.InvariantCulture); 

CultureInfo.InvariantCulture похож на английскую культуру и работает с вашей строкой.

Demo

0

Ну ..Если вам нужен результат в числовом формате, попробуйте, как показано ниже

string date = "Sun, 17 Mar 2013 12:40:23 +0000"; 
DateTime dt = Convert.ToDateTime(date); 
var day = dt.Day; 
var month = dt.Month; 
var year = dt.Year; 
var time = dt.ToShortTimeString(); 
var hour = dt.Hour; 
var minute = dt.Minute; 
var second = dt.Second; 

переменных возвращает точную числовую форму. Примечание: Час будет изображен как 24-часовом формате

0

общественного строка dateConvertion (строка да) { строка SDATE = да; sDate = sDate.Replace ("-", "/"); sDate = sDate.Replace (".", "/");

string format = "dd/MM/yyyy"; 
    DateTime dDate; 
    if (DateTime.TryParse(sDate, out dDate)) 
    { 

     //if (DateTime.TryParseExact(sDate, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dDate)) 
     //{ 

     sDate = dDate.ToString("MM/dd/yyyy"); 
     sDate = sDate.Replace("-", "/"); 
     sDate = sDate.Replace(".", "/"); 

    } 
    return sDate; 
} 
Смежные вопросы