zoukankan      html  css  js  c++  java
  • [翻译]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

    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 t);

    对应实现c实现类tomcat-native-1.x.x-src ativesrcmisc.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;
    }

    以上两处没发起其他地方引用这个方法,没移除应该是为了稳定性及向后兼容考虑。

  • 相关阅读:
    python操作mysql
    django 模型
    sox应用实例:平分一个音频文件
    Python list的各种删除元素操作
    Python sort() 和 sorted() 的区别
    Linux去除文件名中的空格
    合并多个MP4文件
    把wav文件等时长切割
    删除文件里的重复行
    Shell 截取字符串
  • 原文地址:https://www.cnblogs.com/passedbylove/p/12205325.html
Copyright © 2011-2022 走看看