0

RSSフィードを解析し、日付を正しくフォーマットする方法を探しています。2012年12月4日水曜日のように、データを生成するためにforループを実行しています。これが私が使用しているコードです:

Feed = new URL(URLFeed);
DocumentBuilderFactory dbf= DocumentBuilderFactory.newInstance();
db = dbf.newDocumentBuilder();
doc = db.parse(new InputSource(Feed.openStream()));
doc.getDocumentElement().normalize();
nodeList = doc.getElementsByTagName("item");

title = new String[nodeList.getLength()];
pubDate = new String[nodeList.getLength()];
link = new String[nodeList.getLength()];

for(int i=0;i<nodeList.getLength();i++){
    Node node = nodeList.item(i);

    Element fstElmnt = (Element) node;

    NodeList titleList = fstElmnt.getElementsByTagName("title");
    Element titleElement = (Element) titleList.item(0);
    titleList = titleElement.getChildNodes();
    title[i] = ((Node) titleList.item(0)).getNodeValue();


    NodeList pubDateList = fstElmnt.getElementsByTagName("pubDate");
    Element pubDateElement = (Element) pubDateList.item(0);
    pubDateList = pubDateElement.getChildNodes();
    pubDate[i] = ((Node) pubDateList.item(0)).getNodeValue();


    NodeList linkList = fstElmnt.getElementsByTagName("link");
    Element linkElement = (Element) linkList.item(0);
    linkList = linkElement.getChildNodes();
    link[i] = ((Node) linkList.item(0)).getNodeValue();

}

これはそれが返すものです:

Androidの日付の問題

日付を正しくフォーマットするにはどうすればよいですか?

4

4 に答える 4

4

現在、XMLノードから文字列としてデータを取得しているだけです。その文字列を入力形式で解析してから、目的の形式にフォーマットする必要があります。これらは両方とも、を使用して実現できますSimpleDateFormat

出力に使用するタイムゾーンを決定する必要があります。入力にはすでに「UTCからのオフセット」があるため、それについて心配する必要はありません。

次に、国際化をどのように処理したいかを理解する必要があります。おそらく、ユーザーのロケールで情報を表示したいですか?その場合は、DateFormat.getDateInstance()の代わりに使用することをお勧めしますSimpleDateFormat。ただし、入力形式はユーザーに依存しないLocale.USため、入力形式に使用することを忘れないでください。

したがって、完全な例として、次のことが必要になる場合があります。

SimpleDateFormat inputFormat = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z",
                                                    Locale.US);
DateFormat outputFormat = DateFormat.getDateInstance(DateFormat.LONG,
                                                     userLocale);
// TODO: Set time zone in outputFormat

Date date = inputFormat.parse(inputText);
String outputText = outputFormat.format(date);
于 2012-12-04T06:48:51.583 に答える
1

日付をフォーマットするSimpleDateFormatについて聞いたことがあると思いますが、フィードからE, dd MMM yyyy HH:mm:ss Zとして日付を取得しているため、 EEE, MMMM d, yyyyとしてフォーマットする必要があります。それを行うには、次のことを試してください..

SimpleDateFormat fromFormat = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z", Locale.US);
SimpleDateFormat toFormat = new SimpleDateFormat("EEE, MMMM d, yyyy", Locale.US);

try {
       Date fromDate = fromFormat.parse(pubDate[i]) //pubDate[i] is your date (node value)
       pubDate[i] = toFormat.format(fromDate);
    } catch (Exception e) {
                    e.printStackTrace();
                }

ここで DateFormatに関する情報を取得できます

于 2012-12-04T07:03:14.393 に答える
0

JavaでRSSpubDatetoDateオブジェクトを解析するを参照してください

pubDate[i] = ((Node) pubDateList.item(0)).getNodeValue();
DateFormat formatter = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");
Date date = formatter.parse(pubDate[i]);

...
于 2012-12-04T06:50:16.587 に答える
0

曜日と月名の完全な名前を印刷/解析する場合、パターンは次のとおりです。

Format formatter = new SimpleDateFormat("EEEE,MMMM,dd"); 
 String s = formatter.format(new Date());
 System.out.println(s);
于 2012-12-04T07:37:49.760 に答える