比较Java中的日期
我已经阅读了日期函数,但我不能想出解决问题的最佳方法。
我有几个数据库的日期是String
,我想将它与当前日期进行比较。 我正在使用compareTo
,但使用此函数时出现问题我猜是因为我正在比较字符串。
这是我的function:
public int dateCompare(String today, String date2){ return today.compareTo(date2); }
当我在样本日期使用它时:
dateCompare("04/19/2013","04/18/2013");
它返回1,当我将第一个参数的值更改为"04/20/2013"
它仍然返回1。
请帮忙…
Java有一个Date
对象。 你应该使用它。
import java.util.Calendar; import java.util.Date; public class CompareDates { public static void main(String[] args) { // Create a calendar, this will default to today Calendar cal = Calendar.getInstance(); // Subtract 1 day cal.add(Calendar.DATE, -1); // Compare the result (1) System.out.println(dateCompare(new Date(), cal.getTime())); // Add 2 days cal.add(Calendar.DATE, 2); // Compare the result (-1) System.out.println(dateCompare(new Date(), cal.getTime())); } public static int dateCompare(Date today, Date date2) { System.out.println("Compare " + today + " with " + date2); return today.compareTo(date2); } }
您也可以使用Date
API并before
和after
使用…
Date now = new Date(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -1); System.out.println(now + " isBefore " + cal.getTime() + " = " + now.before(cal.getTime())); System.out.println(now + " isAfter " + cal.getTime() + " = " + now.after(cal.getTime())); cal.add(Calendar.DATE, 2); System.out.println(now + " isBefore " + cal.getTime() + " = " + now.before(cal.getTime())); System.out.println(now + " isAfter " + cal.getTime() + " = " + now.after(cal.getTime()));
接近是错误,
public int dateCompare(String today, String date2){ return today.compareTo(date2); }
您将此视为dateComparison,但请查看方法参数String,String。
所以你实际上在比较两个字符串。
你应该首先将这些字符串转换为日期……
喜欢,
public Date parseDate(String dateStr) { DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); return df.parse (dateStr); } public int dateCompare(String today, String date2){ return (parseDate(today)).compareTo(parseDate(date2)); }
编辑:
修改为多种格式:
public Date parseDate(String dateStr, String parsingFormat) throws SomeParsingException { DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); return df.parse (dateStr); } public Date parseDate (String dateStr) throws SomeException { Date d1 = null; try { d1 = parseDate(dateStr, "MM/dd/yyyy"); } catch (SomeParsingException ex) { try { d1 = parseDate(dateStr, "MM-dd-yyyy"); } catch (SomeParsingException ex) { try { d1 = parseDate(dateStr, "MM.dd.yyyy"); } catch(SomeParsingException ex) { throw SomeException ("Unparseable date"); } } } return d1; }
这是我用过的最基本的….
Calendar cal1 = Calendar.getInstance(); Calendar cal2 = Calendar.getInstance(); cal1.setTime(date1); cal2.setTime(date2); boolean sameDay = cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR);