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
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.