难倒C#DateTime ToString()格式化问题

Dan*_*ana 1 c# datetime rfc822

我从C#中的DateTime对象上获取了一些ToString()调用返回的垃圾数据,我担心在用它调整一段时间后我会感到难过.

该函数应该格式化日期以符合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");
}
Run Code Online (Sandbox Code Playgroud)

从我能阅读的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)));
Run Code Online (Sandbox Code Playgroud)

产量:

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
Run Code Online (Sandbox Code Playgroud)

任何想法为什么它返回We18而不是Wed和3ar而不是Mar?

Eoi*_*ell 12

你问题是最后一个问题

return pubDate.ToString(_tmp + " UT");
Run Code Online (Sandbox Code Playgroud)

你在DateTime上用格式化的值做第二个ToString(),作为格式化程序......

尝试将其更改为

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

return _tmp + " UT";
Run Code Online (Sandbox Code Playgroud)