0

The code below produces error Caused by: java.lang.NullPointerException at java.util.Calendar.setTime. Is it the right way to convert "Tue Dec 09 00:00:00 GMT+04:00 2014" to yyyy-MM-dd android using simpledateformat

SimpleDateFormat parseFormat = 
            new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");

    Date date = null;

    try {

        date = parseFormat.parse(dateString);

        System.out.println("Cresult_pass: "+date.toString());
        SimpleDateFormat cformat = new SimpleDateFormat("yyyy-MM-dd");
        String result = cformat.format(date);
        System.out.println("Cresult:result "+result);

    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

The log:

03-06 12:11:11.420: W/System.err(9478): java.text.ParseException: Unparseable date: "Tue Dec 09 00:00:00 GMT+04:00 2014" (at offset 0)
03-06 12:11:11.455: W/System.err(9478):     at java.text.DateFormat.parse(DateFormat.java:555)
03-06 12:11:11.455: W/System.err(9478):     at trail.kreol.view.PalmaresFragment.revertDate(FicheCoursePalmaresFragment.java:296)
03-06 12:11:11.455: W/System.err(9478):     at trail.kreol.view.PalmaresFragment.filteredList(FicheCoursePalmaresFragment.java:230)
03-06 12:11:11.455: W/System.err(9478):     at trail.kreol.view.PalmaresFragment.onCreateView(FicheCoursePalmaresFragment.java:137)
03-06 12:11:11.455: W/System.err(9478):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)
03-06 12:11:11.455: W/System.err(9478):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
03-06 12:11:11.455: W/System.err(9478):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
03-06 12:11:11.455: W/System.err(9478):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
03-06 12:11:11.455: W/System.err(9478):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
03-06 12:11:11.455: W/System.err(9478):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486)
03-06 12:11:11.455: W/System.err(9478):     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
03-06 12:11:11.455: W/System.err(9478):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
03-06 12:11:11.455: W/System.err(9478):     at android.support.v4.view.ViewPager.populate(ViewPager.java:919)
03-06 12:11:11.455: W/System.err(9478):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441)
03-06 12:11:11.455: W/System.err(9478):     at android.view.View.measure(View.java:16831)
03-06 12:11:11.455: W/System.err(9478):     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728)
03-06 12:11:11.455: W/System.err(9478):     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:477)
03-06 12:11:11.455: W/System.err(9478):     at android.view.View.measure(View.java:16831)
JiTHiN
  • 6,548
  • 5
  • 43
  • 69
Dimitri
  • 1,924
  • 9
  • 43
  • 65

2 Answers2

1

SimpleDateFormat by default uses the default locale to parse the weekdays (or months, era, am/pm, for that matter).

Use

SimpleDateFormat parseFormat = 
    new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US);

if you want to apply a specific locale.

Thorstenvv
  • 5,376
  • 1
  • 34
  • 28
0

I am not able to test it for now, but You have forgot the hours after Your time zone. You set Your SimpleDateFormat as following:

SimpleDateFormat parseFormat = 
        new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");

and try to parse a date with:

Tue Dec 09 00:00:00 GMT+04:00 2014

So I guess, You have just forgot the hours. Change Your format String of parseFormat to:

SimpleDateFormat parseFormat = 
        new SimpleDateFormat("EEE MMM dd HH:mm:ss z HH:mm yyyy"); //put HH:mm into the format

So, if it doesn´t fix it, play a little bit, because it could be that the String differs a little bit from my example. But definetely, You have forgotten the hours after timezone. Another possible Solution, You have to use 4 capital Z in Your dateFormat:

     SimpleDateFormat parseFormat = 
        new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZZ yyyy"); 
Opiatefuchs
  • 9,800
  • 2
  • 36
  • 49