C#DateTime to字符串()格式问题

C#DateTime to字符串()格式问题,c#,datetime,rfc822,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.ToUniversalTim

我在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到String()文档我都能读到

但是,对于某些日期,它会生成垃圾:

 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吗?

你能用这个来代替吗

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

你能用这个代替吗

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

你的问题是最后一个

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

你的问题是最后一个

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

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

}

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

}

如果执行ToUniversalTime()调用,它是否有效?这可能会改变区域性和格式字符串是特定于区域性的。@John--Nope。我试过了,也试过在两台不同的机器上运行我的程序。如果你调用ToUniversalTime()它能工作吗?这可能会改变区域性和格式字符串是特定于区域性的。@John--Nope。我试过了,并且在两台不同的机器上运行了我的程序。很好。其他海报在识别原始张贴代码中的额外ToString()调用方面是正确的……是的,您的格式非常适合我的需要,Eoin指出了我的愚蠢错误。很好。其他海报在识别原始张贴代码中的额外ToString()调用时是正确的……是的,您的格式非常适合我的需要,Eoin指出了我的愚蠢错误。啊,伙计!我想今天早上我要在网上展示我的涂鸦:哈哈。。。对我来说差不多是早上9点到10点。。。每天早上;)哈哈,为什么我没发现那个?你也可以在格式中添加UT,这样你就不需要额外的浓缩:“ddd,dd-MMM-yyyy-HH:mm:ss'UT'。啊,伙计!我想今天早上我要在网上展示我的涂鸦:哈哈。。。对我来说差不多是早上9点到10点。。。每天早上;)哈哈,为什么我没发现那个?您也可以按以下格式添加UT,这样您就不需要额外的缩写:“ddd,dd-MMM-yyyy-HH:mm:ss'UT'”。