Озадачен проблемой форматирования C# DateTime ToString()

StackOverflow https://stackoverflow.com/questions/807690

  •  03-07-2019
  •  | 
  •  

Вопрос

Я получаю ненужные данные, возвращаемые из вызова ToString() объекта DateTime в C#, и боюсь, что я в тупике после того, как некоторое время возился с ними.

Предполагается, что функция форматирует даты в соответствии с RFC 822 (как того требует спецификация RSS) и выглядит так:

public static string FormatPubDate(DateTime pubDate) 
{
    string _rfc822Format = "ddd, dd MMM yyyy HH:mm:ss";
    string _tmp = pubDate.ToUniversalTime().ToString(_rfc822Format);

    return pubDate.ToString(_tmp + " UT");
}

Это должно быть то, что я хочу, судя по тому, что я могу прочитать в документах DateTime ToString().

Однако в некоторые даты генерируется мусор:

 Console.WriteLine(FormatPubDate(new DateTime(2008, 12, 16, 13, 44, 33)));
 Console.WriteLine(FormatPubDate(new DateTime(2008, 12, 17, 13, 44, 33)));
 Console.WriteLine(FormatPubDate(new DateTime(2009, 3, 18, 4, 17, 20)));
 Console.WriteLine(FormatPubDate(new DateTime(2009, 4, 30, 10, 44, 33)));

Выход:

Tue, 16 Dec 2008 19:44:33 UT
We17, 17 Dec 2008 19:44:33 UT
We18, 18 3ar 2009 09:17:20 UT
T10u, 30 Apr 2009 15:44:33 UT

Есть идеи, почему он возвращает We18 вместо среды и 3ar вместо марта?

Это было полезно?

Решение

твоя проблема последняя

return pubDate.ToString(_tmp + " UT");

Вы выполняете второй метод ToString() для DateTime с форматированным значением в качестве средства форматирования...

Попробуйте изменить его на

string _rfc822Format = "ddd, dd MMM yyyy HH:mm:ss";
string _tmp = pubDate.ToUniversalTime().ToString(_rfc822Format);

return _tmp + " UT";

Другие советы

Можете ли вы использовать это вместо этого?:

String.Format("{0:r}", dt);  // "Sun, 09 Mar 2008 16:05:07 GMT"   RFC1123

В настоящее время вы вызываете ToString по дате, передавая свой формат RFC, затем вы снова вызываете ToString по дате, вводя уже преобразованную дату + «UT» в качестве формата. Я удивлен, что у вас получилось что-то хорошее!

Попробуй это:

public static string FormatPubDate(DateTime pubDate) 
{
    string _rfc822Format = "ddd, dd MMM yyyy HH:mm:ss";
    return pubDate.ToUniversalTime().ToString(_rfc822Format) + " UT";

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top