[翻译]Convert a date to the RFC822 standard for use in RSS feeds(在RSS源中间日期转换成RFC822标准使用)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[翻译]Convert a date to the RFC822 standard for use in RSS feeds(在RSS源中间日期转换成RFC822标准使用)相关的知识,希望对你有一定的参考价值。
转载自:https://madskristensen.net/blog/convert-a-date-to-the-rfc822-standard-for-use-in-rss-feeds/
RFC822标准日期时间格式如下
Wed, 27 Sep 2006 21:36:45 +0200
而我们在C#中运行以下代码
DateTime.Now.ToString("r")
得到的日期时间如下:
Wed, 27 Sep 2006 21:49:19
GMT(格林尼治标准时间)是RFC822的可接受值,当在我这个地方不适用,他应该是+0200。在我所试的所
有电脑上都失败了。即便我尝试手动编写这样的格式串,他仍旧是不起作用的。
DateTime.Now.ToString("ddd, dd MMM yyyy HH:mm:ss zzzz")
输出
Wed, 27 Sep 2006 21:36:45 +02:00
以上输出几乎接近正确的格式了,但是时区格式还不正确。经过网上搜索以后,问题逐渐明朗:显然.NET不允许你使用DateTime
的标准格式转换到RFC822标准。因而我不得不写一个方法来完成这个转换。
/// <summary>
/// Converts a regular DateTime to a RFC822 date string.
/// </summary>
/// <returns>The specified date formatted as a RFC822 date string.</returns>
private static string GetRFC822Date(DateTime date)
int offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours;
string timeZone = "+" + offset.ToString().PadLeft(2, 0);
if (offset < 0)
int i = offset * -1;
timeZone = "-" + i.ToString().PadLeft(2, 0);
return date.ToString("ddd, dd MMM yyyy HH:mm:ss " + timeZone.PadRight(5, 0));
只需传入一个DateTime实例,他将返回一个格式正确的RFC822字符串,并且可以通过验证。
转载自:https://madskristensen.net/blog/convert-a-date-to-the-rfc822-standard-for-use-in-rss-feeds/
笔者注:RFC是以提案方式向标准委员会提交的,针对某个协议的陈旧/过时的版本会被后面的版本协议,因为他可能不再适合当
前网络空间下(安全、经济、国际等)环境,因为会被废弃,这在DateTime不允许向过时的RFC822转换时发生阻止行为
也能理解的通。
笔者在tomcat源代码里看到类似痕迹
org.apache.tomcat.jni.Time.java
/**
* Formats dates in the RFC822
* format in an efficient manner.
* @param t the time to convert
* @return the formatted date
*/
public static native String rfc822(long
对应实现c实现类tomcat-native-1.x.x-src\\native\\src\\misc.c
TCN_IMPLEMENT_CALL(jstring, Time, rfc822)(TCN_STDARGS, jlong t)
char ts[APR_RFC822_DATE_LEN];
UNREFERENCED(o);
if (apr_rfc822_date(ts, J2T(t)) == APR_SUCCESS)
return AJP_TO_JSTRING(ts);
else
return NULL;
以上两处没发起其他地方引用这个方法,没移除应该是为了稳定性及向后兼容考虑。
以上是关于[翻译]Convert a date to the RFC822 standard for use in RSS feeds(在RSS源中间日期转换成RFC822标准使用)的主要内容,如果未能解决你的问题,请参考以下文章
[翻译]C#.我该如何分析和转换日期时间的到RFC 822的日期,时间格式(How do I parse and convert DateTi
The timeout period elapsed to completion of the operation or the server is not resdosding翻译
TypeError: can‘t convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to
1317. Convert Integer to the Sum of Two No-Zero Integers
LeetCode --- 1317. Convert Integer to the Sum of Two No-Zero Integers 解题报告
LeetCode --- 1317. Convert Integer to the Sum of Two No-Zero Integers 解题报告