用Java比较日期
我已经读过日期函数,但我想不出解决问题的最佳方法 我从数据库中得到了一些日期,它们是用Java比较日期,java,string,date,compare,compareto,Java,String,Date,Compare,Compareto,我已经读过日期函数,但我想不出解决问题的最佳方法 我从数据库中得到了一些日期,它们是字符串,我想将其与当前日期进行比较。我正在使用compareTo,但使用此函数时出现问题,我想这是因为我在比较字符串 这是我的职责: public int dateCompare(String today, String date2){ return today.compareTo(date2); } 当我在样本日期中使用它时: dateCompare("04/19/2013","04/18/2013"
字符串
,我想将其与当前日期进行比较。我正在使用compareTo
,但使用此函数时出现问题,我想这是因为我在比较字符串
这是我的职责:
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);
}
}
您也可以只使用日期
API,在之前使用,在
之后使用
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()));
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);
}
}
您也可以只使用日期
API,在
之前使用,在
之后使用
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, 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;
}
错误在于方法
public int dateCompare(String today, String date2){
return today.compareTo(date2);
}
您将其视为dateComparison,但请查看方法参数String,String
所以你实际上是在比较两个字符串
您应该首先将这些字符串转换为日期
像
编辑:
针对多种格式进行了修改:
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);
这是我用过的最快的一个
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);
日期类如何?“04/18/2013”
不是日期
,而是字符串
将字符串转换为日期对象,然后进行比较。您是按字母顺序比较字符串,而不是按时间顺序比较日期。返回1
的compareTo
方法意味着字符串按字母顺序依次排序。若要按时间顺序进行比较,请使用LocalDate
class将字符串转换为日期时间对象。日期类如何?“04/18/2013”
不是date
,而是String
将字符串转换为日期对象,然后进行比较。您是按字母顺序比较字符串,而不是按时间顺序比较日期。返回1
的compareTo
方法意味着字符串按字母顺序依次排序。要按时间顺序进行比较,请使用LocalDate
class将字符串转换为日期时间对象。非常感谢。我还有一个问题,来自数据库的日期格式不一致。是否有java函数将所有格式转换为“MM/dd/yyyy”。这是我使用的另一种格式:“MM/dd/yyyy”、“MM.dd.yyyy”、“MM-dd-yyyy”。我想您的数据库返回的是字符串而不是日期。这是一种数据不一致性。现在,为了控制它,如果您可以更改表,我想可以将其类型更改为Date或DateTime并移植数据。否则,在从数据库中取出数据时,将其转换为日期。请看我修改过的答案。非常感谢。我还有一个问题,来自数据库的日期格式不一致。是否有java函数将所有格式转换为“MM/dd/yyyy”。这是我使用的另一种格式:“MM/dd/yyyy”、“MM.dd.yyyy”、“MM-dd-yyyy”。我想您的数据库返回的是字符串而不是日期。这是一种数据不一致性。现在,为了控制它,如果您可以更改表,我想可以将其类型更改为Date或DateTime并移植数据。否则,在从数据库中取出数据时,将其转换为日期。请看我修改过的答案。仅供参考:Calendar
类是旧日期时间类的一部分,旧日期时间类现在是遗留的,被java.time类取代。仅供参考:Calendar
类是旧日期时间类的一部分,旧日期时间类现在是遗留的,被java.time类取代。