我正在尝试与日期进行比较。我已经找到了一些与此相关的主题,但是它对我不起作用,我也不知道为什么。例如,我尝试使用“ 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
}
}
答案 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();
}
希望对您有所帮助。