Date parsing different on iOS?

10 views
Skip to first unread message

Gareth Murfin

unread,
Mar 29, 2019, 6:56:13 AM3/29/19
to CodenameOne Discussions
this code runs fine on android and emulator  from my test it produces:
"dateTodayS: Fri Aug 31, dayName: Fri monthName: Aug, dayDate: 31, monthNumber:08",

but on real ios it produces:

"dateTodayS: August 31, dayName: Aug monthName: st, dayDate: 1, monthNumber:08",

I realise its just parsing different because of the result from parsing the date, but shouldnt it behave identically on all platforms?


_("DateStringHolder received "+stringDate);
        SimpleDateFormat dateTodaySDF = new SimpleDateFormat("yyyy-MM-dd");
        Date dateToday = null; //a date object representing the string they passed in
        try {
            dateToday   = dateTodaySDF.parse(stringDate);
            String dateTodayS = dateToday.toString();
            dayName    = dateTodayS.substring(0,3);
            monthName  = dateTodayS.substring(4,7);
            dayDate    = dateTodayS.substring(8,10);            
            monthNumber= stringDate.substring(5,7);
            
            //for testing differences on ios and android!
            Dialog.show("ios debug", "dateTodayS:"+dateTodayS+", dayName:"+dayName+", monthName:"+monthName+", dayDate:"+dayDate+", monthNumber:"+monthNumber, "OK", "Cancel");
        }
        catch(Exception e)
        {
            _("**warning** cant parse date! "+e.getMessage()+" ->"+stringDate);
            e.printStackTrace();
        }

Gareth Murfin

unread,
Mar 29, 2019, 7:42:06 AM3/29/19
to CodenameOne Discussions
So yeah I was substringing date.toString, not a good idea. I changed it to be more consistent as shown below, but I still have a weird issue, day of the week seems to be 2 days out:

 int DAY_OF_WEEK = cal.get(java.util.Calendar.DAY_OF_WEEK);
switch(DAY_OF_WEEK)
            {
                case 0: dayName="Mon";break;
                case 1: dayName="Tue";break;
                case 2: dayName="Wed";break;
                case 3: dayName="Thu";break;
                case 4: dayName="Fri";break;
                case 5: dayName="Sat";break;
                case 6: dayName="Sun";break;
            }

tells me aug 31 2018 was sunday, but it was friday?
even if I start at case 1: its still one day out, whats happening? sure ive been thru this so many times.

SimpleDateFormat dateTodaySDF = new SimpleDateFormat("yyyy-MM-dd");
        Date dateToday = null; //a date object representing the string they passed in
        try {
            dateToday   = dateTodaySDF.parse(stringDate);
            _("dateToday -> "+dateToday.toString());
            //do this purely in cn1 so its same on ios and android, no toString stuff on dates
            java.util.Calendar cal = java.util.Calendar.getInstance();     
            cal.setTime(dateToday); 
            
            int DAY_OF_WEEK = cal.get(java.util.Calendar.DAY_OF_WEEK);
            int DAY_OF_MONTH = cal.get(java.util.Calendar.DAY_OF_MONTH);   
            switch(DAY_OF_WEEK)
            {
                case 0: dayName="Mon";break;
                case 1: dayName="Tue";break;
                case 2: dayName="Wed";break;
                case 3: dayName="Thu";break;
                case 4: dayName="Fri";break;
                case 5: dayName="Sat";break;
                case 6: dayName="Sun";break;
            }
            dayDate=""+DAY_OF_MONTH;
            _("DAY_OF_WEEK  ->"+dayName);
            _("DAY_OF_MONTH ->"+DAY_OF_MONTH);
            int MONTH = cal.get(java.util.Calendar.MONTH);
            switch(MONTH)
            {
                case 0: monthName="Jan";break;
                case 1: monthName="Feb";break;
                case 2: monthName="Mar";break;
                case 3: monthName="Apr";break;
                case 4: monthName="May";break;
                case 5: monthName="Jun";break;
                case 6: monthName="Jul";break;
                case 7: monthName="Aug";break;
                case 8: monthName="Sep";break;
                case 9: monthName="Oct";break;
                case 10: monthName="Nov";break;
                case 11: monthName="Dec";break;
            }
            _("MONTH ->"+monthName);
            monthNumber=(MONTH+1)+"";
            _("monthNumber-> "+monthNumber);
            _("So the date passed in was: "+dayName+", "+DAY_OF_MONTH+" of "+monthName);

Gareth Murfin

unread,
Mar 29, 2019, 7:47:25 AM3/29/19
to CodenameOne Discussions
im assuming the week begins on a sunday in java, if so all good, i remember seeing that once on my casio watch but never again :)

Shai Almog

unread,
Mar 30, 2019, 1:33:07 AM3/30/19
to CodenameOne Discussions
Are you using the SimpleDateFormat from java.text or com.codename1.l10n?
Use the latter.
Reply all
Reply to author
Forward
0 new messages