2017-12-24 30 views
1

Androidアプリを開発し、RSSからpubDateタグを解析する必要があります。そここのタグから実際の時刻を表示するには何ら問題はありませんが、それは私が15 Nov が抽出され、この場合には、日付ができる方法であるここに本当に興味がどのようなpubDateから日付を抽出するRSSタグ

<pubDate>Wed, 15 Nov 2017 14:46:40 +0000</pubDate>

長すぎるのです。さらに、pubDateタグに基づいて日付を比較し、降順で投稿を表示したいと考えています。

答えて

0

ローマを使ってRSSを読む場合、次のようにpubDateをフォーマットすることができます。 https://rometools.github.io/rome/

getPubDate()はDate型を返します。ストリーム操作でソートや比較を行うことができます。

import com.rometools.rome.feed.synd.SyndFeed; 
import com.rometools.rome.io.SyndFeedInput; 
import com.rometools.rome.io.XmlReader; 

import java.net.URL; 
import java.text.SimpleDateFormat; 
import java.util.List; 
import java.util.stream.Collectors; 

public class NewsService { 

    public List<String> getNews(String url) throws Exception { 
     // read RSS 
     SyndFeed feed = new SyndFeedInput().build(new XmlReader(new URL(url))); 
     // format pubDate and create pubDate string list 
     SimpleDateFormat sdf = new SimpleDateFormat("dd MMM"); 
     return feed.getEntries().stream().map(i -> i.getPublishedDate()).map(sdf::format).collect(Collectors.toList()); 
    } 
} 
0

JavaクラスライブラリはRSSの日付/時刻値を解析できます。

RSSの日付/時刻の値はRFC 822 formatです。 java.textパッケージのDateFormatおよびSimpleDateFormatクラスを使用して、これらの日付の1つを解析できます。

まず、RFC 822の日付フォーマッタを作成し、pubdate要素で文字列を解析するためにそれを使用します。

DateFormat formatter = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z"); 
Date pubdate = formatter.parse("Wed, 15 Nov 2017 14:46:40 +0000"); 

あなたとそれを囲む必要がありますので、parse()への呼び出しは、java.textパッケージからParseExceptionをスローしますtry/catch、またはthrows句を使用してください。

次に、カレンダーを作成し、その日付に設定します。

Calendar cal = Calendar.getInstance(); 
    cal.setTime(pubdate); 

は最後に、そのカレンダーから月の月と日を取得します。

System.out.println("Month: " + cal.get(Calendar.MONTH)); 
    System.out.println("Day: " + cal.get(Calendar.DAY_OF_MONTH)); 
関連する問題