class Item { int count, dayMode; ItemListing listing; float avgDayOfWeek; // between 1 and 7 for mon-sun float avgCheckOutDur; int [] dayDistribution = new int[8]; Item(String s) { listing = (ItemListing)itemTable.get(s); count = 0; avgDayOfWeek = 0; avgCheckOutDur = 0; } void count(Transaction t) { count++; //int i = Integer.parseInt(a); String[] dateO = split(t.ckodate, '-'); //year-month-day String[] timeO = split(t.ckotime, ':'); //hours-mins-seconds String[] dateI = split(t.ckidate, '-'); //year-month-day String[] timeI = split(t.ckitime, ':'); //hours-mins-seconds int checkOutTimeH = Integer.parseInt(timeO[0]); int checkOutTimeM = Integer.parseInt(timeO[1]); //assuming all seconds are0 int checkOutDay = Integer.parseInt(dateO[2]); int checkOutMonth = Integer.parseInt(dateO[1]); int checkOutYear = Integer.parseInt(dateO[0]); int dayOfWeek; Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("y-M-d"); try { Date date = sdf.parse(t.ckodate); cal.setTime(date); dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); if (dayOfWeek == 1) //we want to shift to represent a business week dayOfWeek = 7; else dayOfWeek--; } catch (Exception e) { //do anything you want to handle the exception println("Unable to parse date stamp"); dayOfWeek = -1; } int checkInTimeH = Integer.parseInt(timeI[0]); int checkInTimeM = Integer.parseInt(timeI[1]); //assuming all seconds are0 int checkInDay = Integer.parseInt(dateI[2]); int checkInMonth = Integer.parseInt(dateI[1]); int checkInYear = Integer.parseInt(dateI[0]); // println("out:\t" + "\t" + checkOutYear + "\t" + checkOutMonth + "\t" + checkOutDay + "\t" + checkOutTime); // println("in:\t" + "\t" + checkInYear + "\t" + checkInMonth + "\t" + checkInDay + "\t" + checkInTime); long dur_ms; SimpleDateFormat sdf_l = new SimpleDateFormat("y-M-d-H-m"); try { Date dateOut = sdf_l.parse(t.ckodate + "-" + checkOutTimeH + "-" + checkOutTimeM ); Date dateIn = sdf_l.parse(t.ckidate + "-" + checkInTimeH + "-" + checkInTimeM ); dur_ms = dateIn.getTime() - dateOut.getTime(); } catch (Exception e) { //do anything you want to handle the exce ption println("Unable to parse date stamp2"); dur_ms = 1; } float durDays = ((float)dur_ms/ (1000*60*60*24)); if (!(dur_ms/10000 > 100000000)){ avgCheckOutDur = (avgCheckOutDur*(count-1) + durDays)/count; if (dayOfWeek != -1) dayDistribution[dayOfWeek]++; else count--; dayMode = getMode(); avgDayOfWeek = (avgDayOfWeek*(count-1) + (float)dayOfWeek)/count; // println(listing.getLabel() + ": " + (float)avgCheckOutDur + "\t" + avgDayOfWeek) ; } else count--; } int getMode(){ int gday = 7; for (int i = 1; i<=6; i++) if(dayDistribution[i] > dayDistribution[gday]) gday = i; return gday; } }