import java.text.*;
import java.util.*;
class Eveniment {
private Date dataInceput, dataSfarsit
;
try {
this.dataInceput = format.parse(dataInceput);
this.dataSfarsit = format.parse(dataSfarsit);
System.
out.
println("Data nu este in formatul cerut!"); }
this.nume = nume;
}
public Date getDataInceput
() { return dataInceput;
}
public Date getDataSfarsit
() { return dataSfarsit;
}
return nume;
}
}
class EvenimentRecurent extends Eveniment {
private int intervalRecurentaOre;
public EvenimentRecurent
(String dataInceput,
String dataSfarsit,
String nume,
int numarOre
) { super(dataInceput, dataSfarsit, nume);
this.intervalRecurentaOre = numarOre;
}
public String urmatorulEveniment
(String dataCurentaString
) { try {
Date dataCurenta
= format.
parse(dataCurentaString
); Date dataInceputEveniment
= this.
getDataInceput();
long diferentaMilisecunde = dataCurenta.getTime() - dataInceputEveniment.getTime();
long intervalMilisecunde = (long) intervalRecurentaOre * 60 * 60 * 1000;
long numarRecurenteTrecute = diferentaMilisecunde / intervalMilisecunde;
urmatorulEvenimentCalendar.setTime(dataInceputEveniment);
urmatorulEvenimentCalendar.
add(Calendar.
HOUR_OF_DAY,
(int) (numarRecurenteTrecute
+ 1) * intervalRecurentaOre
);
return format.format(urmatorulEvenimentCalendar.getTime());
System.
out.
println("Data curentă nu este în formatul cerut!"); return null;
}
}
}
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:00
}
}
/*Sigur, iată ideea generală și pașii pentru a rezolva problema creării clasei
EvenimentRecurent:
Ideea Generală:
Trebuie să creezi o clasă nouă (EvenimentRecurent) care "moștenește"
caracteristicile clasei Eveniment (data de început, data de sfârșit, nume)
și adaugă funcționalitatea specifică evenimentelor care se repetă la un anumit
interval de timp (în ore). Scopul principal este ca, dată fiind o anumită dată
și oră (dataCurenta), clasa să poată calcula și returna data și ora la care va
avea loc următoarea instanță a evenimentului recurent.
Pași de Rezolvare:
Definește clasa EvenimentRecurent ca subclasă a clasei Eveniment:
Folosește cuvântul cheie extends în declarația clasei: class EvenimentRecurent
extends Eveniment { ... }.
Adaugă un câmp pentru intervalul de recurență:
În interiorul clasei EvenimentRecurent, declară o variabilă privată de tip int
pentru a stoca numărul de ore după care evenimentul se repetă (de exemplu,
private int intervalRecurentaOre;).
Implementează constructorul clasei EvenimentRecurent:
Constructorul trebuie să primească ca argumente: dataInceput (String),
dataSfarsit (String), nume (String), și numarOre (int).
În interiorul constructorului:
Apelează constructorul clasei părinte Eveniment folosind super(dataInceput,
dataSfarsit, nume); pentru a inițializa câmpurile moștenite.
Initializează câmpul intervalRecurentaOre cu valoarea primită pentru numarOre.
Implementează metoda urmatorulEveniment(String dataCurentaString):
Această metodă primește un String (dataCurentaString) reprezentând data și
ora curente.
Parseează datele:
Creează un obiect SimpleDateFormat cu formatul "yyyy-MM-dd HH:mm:ss".
Încearcă să convertești atât dataCurentaString cât și dataInceput (obținut din
câmpul moștenit) în obiecte java.util.Date folosind metoda
parse() a SimpleDateFormat. Trebuie să gestionezi excepția ParseException în
cazul în care formatul stringului este incorect.
Calculează diferența de timp și numărul de recurențe:
Calculează diferența în milisecunde dintre dataCurenta și dataInceput folosind
metoda getTime() a clasei Date.
Calculează intervalul de recurență în milisecunde (înmulțește
intervalRecurentaOre cu 60 * 60 * 1000).
Determină de câte ori s-a repetat evenimentul complet până la dataCurenta
împărțind diferența de timp la intervalul de recurență.
Calculează momentul următorului eveniment:
Creează un obiect java.util.Calendar și setează-l la data de început a
evenimentului (dataInceput).
Adaugă la această dată un număr de ore egal cu (numărul de recurențe
complete + 1) * intervalRecurentaOre. Adăugăm + 1 pentru a obține
următorul eveniment.
Formatează rezultatul:
Folosește același obiect SimpleDateFormat pentru a formata obiectul Date
rezultat (din Calendar) înapoi într-un String în formatul "yyyy-MM-dd HH:mm:ss".
Returnează rezultatul: Returnează stringul formatat. În cazul unei erori
de parsare, poți returna null sau arunca o excepție.*/