user2763261
user2763261

Reputation: 33

Need to change format of date in my Android app

UPDATE. I'm really struggling with the answers given (they're not bad answers, I'm just struggling) It would really help for more detailed answers

I'm pulling in an RSS feed into my app, the pubDate is currently showing up as for example Mon, 10 Nov 2014 03:34:38 +0000.

I need it to show up in a more user friendly manner. I've looked at all the options, SimpleDateFormat..etc, I'm sort of new to Java so all previous suggestions are just going over my head, I'm looking for what I actually need to put in my code.

Code is as follows AndroidXMLParsingActivity.java

package com.example.myapp;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Locale;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import java.util.Calendar;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;


public class AndroidXMLParsingActivity extends ListActivity {

// All static variables
static final String URL = "http://example.xml";
// XML node keys
static final String KEY_ITEM = "item"; // parent node
static final String KEY_DATE = "pubDate";
static final String KEY_DESC = "description";
static final String KEY_ID = "title";
static final String KEY_LDESC = "content:encoded";


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();

    XMLParser parser = new XMLParser();
    String xml = parser.getXmlFromUrl(URL); // getting XML
    Document doc = parser.getDomElement(xml); // getting DOM element

    NodeList nl = doc.getElementsByTagName(KEY_ITEM);
    // looping through all item nodes <item>
    for (int i = 0; i < nl.getLength(); i++) {
        // creating new HashMap
        HashMap<String, String> map = new HashMap<String, String>();
        Element e = (Element) nl.item(i);
        // adding each child node to HashMap key => value
        map.put(KEY_ID, parser.getValue(e, KEY_ID));
        map.put(KEY_DESC, parser.getValue(e, KEY_DESC));
        map.put(KEY_DATE, parser.getValue(e, KEY_DATE));
        map.put(KEY_DESC, parser.getValue2(e, KEY_DESC));
        map.put(KEY_LDESC, parser.getValue2(e, KEY_LDESC));

        // adding HashList to ArrayList
        menuItems.add(map);
    }

    // Adding menuItems to ListView

    ListAdapter adapter = new SimpleAdapter(this, menuItems,
            R.layout.list_item,
            new String[] { KEY_ID, KEY_LDESC, KEY_DATE}, new int[] {
                    R.id.name, R.id.content_encoded, R.id.pubDate });

    setListAdapter(adapter);

    // selecting single ListView item
    ListView lv = getListView();

    lv.setOnItemClickListener(new OnItemClickListener() {



        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // getting values from selected ListItem
            String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
            String description = ((TextView) view.findViewById(R.id.description)).getText().toString();
            String Ldescription = ((TextView) view.findViewById(R.id.content_encoded)).getText().toString();
            String pubDate = ((TextView) view.findViewById(R.id.pubDate)).getText().toString();



            // Starting new intent
            Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
            in.putExtra(KEY_ID, name);
            in.putExtra(KEY_DESC, description);
            in.putExtra(KEY_LDESC, Ldescription);
            in.putExtra(KEY_DATE, pubDate);
            startActivity(in);



        }
    });
}
}

XMLParser.java

package com.example.myapp;

import java.io.IOException;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.w3c.dom.Document;
import org.w3c.dom.CharacterData;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import android.util.Log;

public class XMLParser {

// constructor
public XMLParser() {

}

/**
 * Getting XML from URL making HTTP request
 * @param url string
 * */
public String getXmlFromUrl(String url) {
    String xml = null;

    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        xml = EntityUtils.toString(httpEntity);

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    // return XML
    return xml;
}

/**
 * Getting XML DOM element
 * @param XML string
 * */
public Document getDomElement(String xml){
    Document doc = null;
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    try {

        DocumentBuilder db = dbf.newDocumentBuilder();

        InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(xml));
            doc = db.parse(is); 

        } catch (ParserConfigurationException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        } catch (SAXException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        } catch (IOException e) {
            Log.e("Error: ", e.getMessage());
            return null;
        }

        return doc;
}

/** Getting node value
  * @param elem element
  */
 public final String getElementValue( Node elem ) {
     Node child;
     if( elem != null){
         if (elem.hasChildNodes()){
             for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                 if( child.getNodeType() == Node.TEXT_NODE  ){
                     return child.getNodeValue();
                 }
             }
         }
     }
     return "";
 }










 public final String getElementValue2( Node elem ) {
     Node child;
     if( elem != null){
         if (elem.hasChildNodes()){
             for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
                 //if( child.getNodeType() == Node.TEXT_NODE  ){
                 if(child.getNodeType() == Node.CDATA_SECTION_NODE){
                     return child.getNodeValue();
                 }
             }
         }
     }
     return "";
     //return elem.getTextContent();
 }

 public static String getCharacterDataFromElement(Node elem) {
        Node child = elem.getFirstChild();
        if (child instanceof CharacterData) {
          CharacterData cd = (CharacterData) child;
          return cd.getData();
        }
        return "";
      }

 public String getValue3(Element item, String str){
     NodeList n = item.getElementsByTagNameNS("http://purl.org/rss/1.0/modules/content/", str);
     String ses = this.getElementValue2(n.item(0));
     //return this.getElementValue2(n.item(0));
     //return ses;
     String mim =ses.replaceAll("(?s)\\<.*?\\>", " \n");
     //return Promjena(ses);
     return mim;
 }







 /**
  * Getting node value
  * @param Element node
  * @param key string
  * */
 public String getValue(Element item, String str) {     
        NodeList n = item.getElementsByTagName(str);        
        return this.getElementValue(n.item(0));
    }


 public String getValue2(Element item, String str) {        
        NodeList n = item.getElementsByTagName(str);        
        return XMLParser.getCharacterDataFromElement(n.item(0));
    }



}

I'm not sure if you need any more information. I'm also sure there is a lot of bad or redundant code, any help with that would be great!

Thank you very much!

Upvotes: 1

Views: 1050

Answers (3)

user2763261
user2763261

Reputation: 33

i tried replacing

String pubDate = ((TextView) view.findViewById(R.id.pubDate)).getText().toString();

with

String pubDate = "Mon, 10 Nov 2014 03:34:38 +0000";


            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");
            Date _date = null;
            try {
                _date = dateFormat.parse(pubDate);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            System.out.println(_date .toString()); 



             // print the Date in year month and date


            SimpleDateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd");
            ((TextView) view.findViewById(R.id.pubDate)).getText().toString();

didn't work...am I on the right track?

Upvotes: 0

Thiha Zaw
Thiha Zaw

Reputation: 826

You can you SimpleDateFormat class to convert friendly date as following

public String getFriendlyDayString(Date pubDate){
     SimpleDateFormat shortenedDateFormat = new SimpleDateFormat("EEE MMM dd");
     return shortenedDateFormat.format(pubDate);
}

You can pass your pubDate to like this getFriendlyDateString(pubDate);

Upvotes: 0

Subhalaxmi
Subhalaxmi

Reputation: 5707

String date = "Mon, 10 Nov 2014 03:34:38 +0000";


SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm");
Date _date = null;
try {
    _date = sourceFormat.parse(date);
} catch (ParseException e) {
    e.printStackTrace();
}
System.out.println(_date .toString()); 



 // print the Date in year month and date


SimpleDateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(targetFormat.format(_date));

Upvotes: 2

Related Questions