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

Posted

技术标签:

【中文标题】难倒 C# DateTime ToString() 格式问题【英文标题】:Stumped on C# DateTime ToString() formatting problem 【发布时间】:2010-10-22 21:40:27 【问题描述】:

我从 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?

【问题讨论】:

如果你拿出 ToUniversalTime() 调用它是否有效?这可能会改变文化和格式字符串是文化特定的。 @John -- 不。我试过了,并且在几台不同的机器上运行我的程序。 【参考方案1】:

你能用这个代替吗?:

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

【讨论】:

好点。其他张贴者在识别原始发布代码中的额外 ToString() 调用方面是正确的...... 是的,你的格式非常适合我的需要,Eoin 指出了我的愚蠢错误。【参考方案2】:

你的问题是最后一个

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

【讨论】:

哇,伙计!我想这是我早上在互联网上展示我的愚蠢:P 哈哈...对我来说几乎是早上 9 点到 10 点...每天早上 ;) 大声笑。为什么我没有发现那个?您也可以按格式添加 UT,这样就不需要额外的连接:“ddd, dd MMM yyyy HH:mm:ss' UT'”。【参考方案3】:

您当前在日期调用 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";


【讨论】:

以上是关于难倒 C# DateTime ToString() 格式问题的主要内容,如果未能解决你的问题,请参考以下文章

C# DateTime.Now

C# DateTime ToString 标准文化格式

C#中DateTime格式转换

C#关于DateTime得到的当前时间的格式问题

转 C#关于DateTime得到的当前时间的格式和用法

c# 获取当前时间var str = DateTime.Now.Date.ToString("yyyyMMdd");