2017-12-24 4 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()는 날짜 유형을 반환합니다. 스트림 작업별로 정렬하거나 비교할 수 있습니다.

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 패키지의 DateFormatSimpleDateFormat 클래스를 사용하여이 날짜 중 하나를 파싱 할 수 있습니다.

첫째, 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));