Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java比较日期_Java_String_Date_Compare_Compareto - Fatal编程技术网

用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类取代。