javasortingarraylistdate-sorting

Sorting of Arraylist by date only sorts day and not month and year?


I'm attempting to SORT an ArrayList by (Type Date) MyObject.getDate()

My format is formatted by SimpleDateFormat by dd-mm-yyyy; I'm using a custom comparator to sort my list. I'm using Collections.sort(produuctList, new CustomComparator())

Problem my sorted list is only by dd and not dd-mm-yyyy.

Any ideas?

public class Product
{
    private String productName; 
    private Date boughtOn;
    private Date useBy; 
    private double boughtAt; 
    private long quantity; 
    private static DateFormat dateFormat;


    public Date getUseBy()
    {
        return useBy;
    }
    public void setUseBy(Date useBy)
    {
        this.useBy = useBy;
    }
}

public static Date rtnDate(String dateStr, int currentLineCount)
    {
        SimpleDateFormat df = new SimpleDateFormat("dd-mm-yyyy");
        try
        {   
            Date date = df.parse(dateStr);
            return date;
        }
        catch (ParseException e)
        {
            productParsingErrorMessages.add("Date parse exception: " + e + "on line " + currentLineCount);
            return null;
        }

//      DateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
//      Date date2 = (Date)formatter.parse(dateStr);
    }
System.out.println("Product list - BEFORE sorting by UseBy");
printInventory(produuctList);

Collections.sort(produuctList, new CustomComparator());

System.out.println("Product list - AFTER sorting by UseBy");
printInventory(produuctList);
public class CustomComparator implements Comparator<Product>
{
    @Override
    public int compare(Product o1, Product o2)
    {
        return o1.getUseBy().compareTo(o2.getUseBy());
    }
}

Product list - BEFORE sorting by UseBy

Product name: sugar UseBy : 12-12-2012
Product name: sugar UseBy : 01-10-2012
Product name: sugar UseBy : 16-04-2012
Product name: sugar UseBy : 30-01-2012
Product name: sugar UseBy : 25-04-2012
Product name: sugar UseBy : 03-04-2012
Product name: sugar UseBy : 08-04-2012

Product list - AFTER sorting by UseBy

Product name: sugar UseBy : 01-10-2012
Product name: sugar UseBy : 03-04-2012
Product name: sugar UseBy : 08-04-2012
Product name: sugar UseBy : 12-12-2012
Product name: sugar UseBy : 16-04-2012
Product name: sugar UseBy : 25-04-2012
Product name: sugar UseBy : 30-01-2012


Solution

  • If your format String has been copied correctly, your SimpleDateFormat is wrong. It should be dd-MM-yyyy, not dd-mm-yyyy, since you're interested in months, not minutes.

    You've got:

    public static Date rtnDate(String dateStr, int currentLineCount)
    {
        SimpleDateFormat df = new SimpleDateFormat("dd-mm-yyyy");
    

    When you should be using:

    public static Date rtnDate(String dateStr, int currentLineCount)
    {
        SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
    

    This would explain everything.