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

我在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"); } 

从我能读到的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而不是Wed和3ar而不是Mar?

你的问题是最后一个问题

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

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

尝试将其更改为

 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"; }