代码之家  ›  专栏  ›  技术社区  ›  Jakub

使用ASP Classic将RFC-32日期格式转换为短日期(MM/DD/YYYY)

  •  0
  • Jakub  · 技术社区  · 17 年前

    我不是一个优秀的ASP经典开发人员,但我的任务是在工作中支持这个应用程序,我一直在尝试将RSS提要日期转换为短日期格式。我似乎找不到解决办法。

    我有以下格式:

    Wed, 10 Jun 2009 12:46:13 +0000
    

    06/10/2009
    

    到目前为止,我一直在修补ASP的RSS提要脚本:

    <%
    ' change the RSSURL variable to the exact URL of the RSS Feed you want to pull
    RSSURL = "{url to rss feed}"
    
    Dim objHTTP ' this object is used to call the RSS Feed remotely
    Dim RSSURL,RSSFeed ' these variables hold the URL and Content for the RSS Feed
    Dim xmlRSSFeed ' this variable hold the XML data in a DOM Object
    Dim objItems,objItem, objChild ' these variables are used to temporarily hold data from the various RSS Items
    Dim title,description,link '  these are local variables that will hold the data to be displayed
    Dim pubDate 
    Dim RSSOutput ' variable will hold the HTML that was converted from the RSS Feed
    
    ' this code requests the raw RSS/XML and saves the response as a string <RSSFeed>
    Set objHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP")
    objHTTP.open "GET",RSSURL,false
    objHTTP.send
    RSSFeed = objHTTP.responseText
    
    ' this code takes the raw RSSFeed and loads it into an XML Object
    Set xmlRSSFeed = Server.CreateObject("MSXML2.DomDocument.4.0")
    xmlRSSFeed.async = false
    xmlRSSFeed.LoadXml(RSSFeed)
    
    ' this code disposes of the object we called the feed with
    Set objHTTP = Nothing
    
    ' this is where you determine how to display the content from the RSS Feed
    
    ' this code grabs all the "items" in the RSS Feed
    Set objItems = xmlRSSFeed.getElementsByTagName("item")
    
    ' this code disposes of the XML object that contained the entire feed
    Set xmlRSSFeed = Nothing
    
    ' loop over all the items in the RSS Feed
    For x = 0 to 3
        ' this code places the content from the various RSS nodes into local variables
        Set objItem = objItems.item(x)
        For Each objChild in objItem.childNodes
            Select Case LCase(objChild.nodeName)
                Case "title"
                      title = objChild.text
                Case "link"
                      link = objChild.text
                Case "description"
                      description = objChild.text
                Case "pubdate"
                      pubDate = objChild.text
            End Select
        Next
        ' Format display output
        RSSOutput = RSSOutput & "<tr><td valign='top' style='width:75px; height: 34px;' class='addresstext2'><b>"& pubDate &"</b></td><td valign='top'><a class=ccc href=""" & link & """>" & title & "</a></td></tr>"      
    
    Next
    

    %&燃气轮机;

    当我从RSS中获取pubDate时,我相信它是一个字符串,当我尝试对它进行CDate时,我得到了一个类型不匹配,我还尝试了Format()和相同的处理。有人能建议一种方法来格式化这个日期,以满足我的需要吗?

    1 回复  |  直到 17 年前
        1
  •  2
  •   Espo    17 年前

    Rss使用中指定的格式 RFC822 .

    我发现了一个函数 this thread

    function parseRSSDate(sRSSDate)
    '   take RFC822-formatted date string and return VBScript date object
    '   ie: "Fri, 13 Jun 2008 16:33:50 GMT" 
    
    dim sDay, sMonthName, sMonthNum, sYear, sHour, sMinute, sSecond
    dim oRE, oMatches, oMatch
    dim sDate, oDate
    
    set oRE = new regexp
        oRE.IgnoreCase  = True
        oRE.Global      = True
        oRE.Pattern     = "^([A-Za-z]{3}),\s([0-9]{1,2})\s([A-Za-z]{3})\s([0-9]{4})\s([0-9]{2}):([0-9]{2}):([0-9]{2})"
        set oMatches = oRE.Execute(sRSSDate)
            if oMatches.count > 0 then
                set oMatch = oMatches(0)
                    sDay        = oMatch.SubMatches(1)
                    sMonthName  = oMatch.SubMatches(2)
                    sMonthNum   = monthVal(sMonthName)
                    sYear       = oMatch.SubMatches(3)
                    sHour       = oMatch.SubMatches(4)
                    sMinute     = oMatch.SubMatches(5)
                    sSecond     = oMatch.SubMatches(6)
                    sDate = sMonthNum & "/" & sDay & "/" & sYear
                    oDate = cDate(sDate)
                set oMatch = nothing
            end if
        set oMatches = nothing
    set oRE = nothing
    parseRSSDate = oDate
    end function
    

    它还调用一个名为monthVal的函数,该函数只返回月份名称的数字:

    代码:

    function monthVal(sMonthName)
    ' return month number (1-12) from month name
    dim rv
    dim aMonths : aMonths = Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
    for i = 0 to uBound(aMonths)
        if sMonthName = aMonths(i) then rv = i+1
    next
    monthVal = rv
    end function
    
    推荐文章