两个日期比较

时间:2019-05-23 21:44:29

标签: java

我正在尝试与日期进行比较。我已经找到了一些与此相关的主题,但是它对我不起作用,我也不知道为什么。例如,我尝试使用“ compareTo,after,before”之类的方法进行比较,但是它不起作用。我能做什么?我收到字符串错误compareTo(java.lang.String)无法应用于(java.util.Date)。我能做什么?我想从类EvenimentRecurent开始进行修改。

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
class Eveniment {
    private Date dataInceput, dataSfarsit;
    private String nume;

    public Eveniment() {
    }

    public Eveniment(String dataInceput, String dataSfarsit, String nume) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            this.dataInceput = format.parse(dataInceput);
            this.dataSfarsit = format.parse(dataSfarsit);
        } catch (Exception e) {
            System.out.println("Data nu este in formatul cerut!");
        }

        this.nume = nume;
    }

    public Date getDataInceput() {
        return dataInceput;
    }

    public Date getDataSfarsit() {
        return dataSfarsit;
    }

    public String getNume() {
        return nume;
    }
}

class EvenimentRecurent extends Eveniment {
    private Date dataP;
    public int numarOre;


    public  EvenimentRecurent(String dataInceput, String dataSfarsit, String nume, int numarOre){
        super(dataInceput,dataSfarsit,nume);
        this.numarOre=numarOre;


    }
    private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:s");
    public String urmatorulEveniment(String dataP){
        Date neww;
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            this.dataP = format.parse(dataP);
        } catch (Exception e) {
            System.out.println("Data nu este in formatul cerut!");

        }
            Calendar c = Calendar.getInstance();
            c.setTime(this.dataP);
            while(dataP.compareTo(getDataSfarsit()))
            c.add(Calendar.HOUR, numarOre);
            Date currentDatePlusOne = c.getTime();
            String strDate = dateFormat.format(currentDatePlusOne);
        return strDate;
    }
}
public class Main {

    public static void main(String[] args) {
        EvenimentRecurent er = new EvenimentRecurent("2019-03-09 22:46:00", "2019-03-09 23:00:00", "Scris probleme", 24);
        System.out.println(er.urmatorulEveniment("2019-04-19 22:46:23"));
        // 2019-04-20 22:46:23

    }
}

2 个答案:

答案 0 :(得分:3)

问题出在此语句中

dataP.compareTo(getDataSfarsit())

首先,将 dataP 更改为 this.dataP ,这样该语句将为:dataP.compareTo(getDataSfarsit())

第二,您应该知道java.util.Date类的compareTo方法返回一个int,这就是javadoc所说的:“ 如果参数Date等于此Date,则值为0;如果此Date在Date参数之前,则小于0;如果此Date在Date参数之后,则大于0。“在这种情况下,您的条件应类似于以下内容:

while(this.dataP.compareTo(getDataSfarsit())==0)

仅此而已,希望对您有所帮助:)

答案 1 :(得分:2)

这是一个可能的解决方案,我更喜欢使用数字格式。

try {
    SimpleDateFormat formatoDeFecha = new SimpleDateFormat("dd/MM/yyyy");

    String fecha1 = "20/05/2019";
    String fecha2 = "19/05/2019";

    Date dFecha1 = formatoDeFecha.parse(fecha1);
    Date dFecha2 = formatoDeFecha.parse(fecha2);

    if(dFecha1.getTime()==dFecha2.getTime()){
        System.out.println("Fechas iguales");
    }
    else if(dFecha1.getTime()<dFecha2.getTime()){
        System.out.println("Fecha 1 menor a fecha 2");
    }
    else if(dFecha1.getTime()>dFecha2.getTime()){
        System.out.println("Fecha 1 mayor a fecha 2");
    }
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

希望对您有所帮助。