import java.text.*;
import java.util.*;
class Eveniment {
private Date dataInceput, dataSfarsit
; // Primeste 2 stringuri in format yyyy-MM-dd HH:mm:ss reprezentand data si ora
// de inceput si de final a evenimentului si inca un string care contine numele
// cu care apare evenimentul in calendar
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 numarOre;
public EvenimentRecurent
(String dataInceput,
String dataSfarsit,
String nume,
int numarOre
) { super(dataInceput, dataSfarsit, nume);
this.numarOre = numarOre;
}
try {
Date timpInceputDate
= formatRecurent.
parse(formatRecurent.
format(getDataInceput
())); Date timpSpecificDate
= formatRecurent.
parse(dataEveniment
);
calendarCurent.setTime(timpInceputDate);
calendarSpecific.setTime(timpSpecificDate);
long oreDiferenta = (calendarSpecific.getTimeInMillis() - calendarCurent.getTimeInMillis()) / (60 * 60 * 1000);
long multiplu = oreDiferenta / numarOre;
calendarCurent.
add(Calendar.
HOUR_OF_DAY,
(int) (multiplu
* numarOre
));
if (calendarCurent.getTime().before(timpSpecificDate) || calendarCurent.getTime().equals(timpSpecificDate)) {
calendarCurent.
add(Calendar.
HOUR_OF_DAY, numarOre
); }
return formatRecurent.format(calendarCurent.getTime());
System.
out.
println("Data nu este in 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
}
}
aW1wb3J0IGphdmEudGV4dC4qOwppbXBvcnQgamF2YS51dGlsLio7CgpjbGFzcyBFdmVuaW1lbnQgewogICAgcHJpdmF0ZSBEYXRlIGRhdGFJbmNlcHV0LCBkYXRhU2ZhcnNpdDsKICAgIHByaXZhdGUgU3RyaW5nIG51bWU7CiAgICAvLyBQcmltZXN0ZSAyIHN0cmluZ3VyaSBpbiBmb3JtYXQgeXl5eS1NTS1kZCBISDptbTpzcyByZXByZXplbnRhbmQgZGF0YSBzaSBvcmEKICAgIC8vIGRlIGluY2VwdXQgc2kgZGUgZmluYWwgYSBldmVuaW1lbnR1bHVpIHNpIGluY2EgdW4gc3RyaW5nIGNhcmUgY29udGluZSBudW1lbGUKICAgIC8vIGN1IGNhcmUgYXBhcmUgZXZlbmltZW50dWwgaW4gY2FsZW5kYXIKICAgIHB1YmxpYyBFdmVuaW1lbnQoU3RyaW5nIGRhdGFJbmNlcHV0LCBTdHJpbmcgZGF0YVNmYXJzaXQsIFN0cmluZyBudW1lKSB7CiAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdCBmb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgieXl5eS1NTS1kZCBISDptbTpzcyIpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRoaXMuZGF0YUluY2VwdXQgPSBmb3JtYXQucGFyc2UoZGF0YUluY2VwdXQpOwogICAgICAgICAgICB0aGlzLmRhdGFTZmFyc2l0ID0gZm9ybWF0LnBhcnNlKGRhdGFTZmFyc2l0KTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkRhdGEgbnUgZXN0ZSBpbiBmb3JtYXR1bCBjZXJ1dCEiKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5udW1lID0gbnVtZTsKICAgIH0KCiAgICBwdWJsaWMgRGF0ZSBnZXREYXRhSW5jZXB1dCgpIHsKICAgICAgICByZXR1cm4gZGF0YUluY2VwdXQ7CiAgICB9CgogICAgcHVibGljIERhdGUgZ2V0RGF0YVNmYXJzaXQoKSB7CiAgICAgICAgcmV0dXJuIGRhdGFTZmFyc2l0OwogICAgfQoKICAgIHB1YmxpYyBTdHJpbmcgZ2V0TnVtZSgpIHsKICAgICAgICByZXR1cm4gbnVtZTsKICAgIH0KfQoKY2xhc3MgRXZlbmltZW50UmVjdXJlbnQgZXh0ZW5kcyBFdmVuaW1lbnQgewogICAgcHJpdmF0ZSBpbnQgbnVtYXJPcmU7CgogICAgcHVibGljIEV2ZW5pbWVudFJlY3VyZW50KFN0cmluZyBkYXRhSW5jZXB1dCwgU3RyaW5nIGRhdGFTZmFyc2l0LCBTdHJpbmcgbnVtZSwgaW50IG51bWFyT3JlKSB7CiAgICAgICAgc3VwZXIoZGF0YUluY2VwdXQsIGRhdGFTZmFyc2l0LCBudW1lKTsKICAgICAgICB0aGlzLm51bWFyT3JlID0gbnVtYXJPcmU7CiAgICB9CgogICAgcHVibGljIFN0cmluZyB1cm1hdG9ydWxFdmVuaW1lbnQoU3RyaW5nIGRhdGFFdmVuaW1lbnQpIHsKICAgICAgICBTaW1wbGVEYXRlRm9ybWF0IGZvcm1hdFJlY3VyZW50ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXktTU0tZGQgSEg6bW06c3MiKTsKICAgICAgICB0cnkgewogICAgICAgICAgICBEYXRlIHRpbXBJbmNlcHV0RGF0ZSA9IGZvcm1hdFJlY3VyZW50LnBhcnNlKGZvcm1hdFJlY3VyZW50LmZvcm1hdChnZXREYXRhSW5jZXB1dCgpKSk7CiAgICAgICAgICAgIERhdGUgdGltcFNwZWNpZmljRGF0ZSA9IGZvcm1hdFJlY3VyZW50LnBhcnNlKGRhdGFFdmVuaW1lbnQpOwoKICAgICAgICAgICAgQ2FsZW5kYXIgY2FsZW5kYXJDdXJlbnQgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwogICAgICAgICAgICBjYWxlbmRhckN1cmVudC5zZXRUaW1lKHRpbXBJbmNlcHV0RGF0ZSk7CgogICAgICAgICAgICBDYWxlbmRhciBjYWxlbmRhclNwZWNpZmljID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKICAgICAgICAgICAgY2FsZW5kYXJTcGVjaWZpYy5zZXRUaW1lKHRpbXBTcGVjaWZpY0RhdGUpOwoKICAgICAgICAgICAgbG9uZyBvcmVEaWZlcmVudGEgPSAoY2FsZW5kYXJTcGVjaWZpYy5nZXRUaW1lSW5NaWxsaXMoKSAtIGNhbGVuZGFyQ3VyZW50LmdldFRpbWVJbk1pbGxpcygpKSAvICg2MCAqIDYwICogMTAwMCk7CiAgICAgICAgICAgIGxvbmcgbXVsdGlwbHUgPSBvcmVEaWZlcmVudGEgLyBudW1hck9yZTsKCiAgICAgICAgICAgIGNhbGVuZGFyQ3VyZW50LmFkZChDYWxlbmRhci5IT1VSX09GX0RBWSwgKGludCkgKG11bHRpcGx1ICogbnVtYXJPcmUpKTsKCiAgICAgICAgICAgIGlmIChjYWxlbmRhckN1cmVudC5nZXRUaW1lKCkuYmVmb3JlKHRpbXBTcGVjaWZpY0RhdGUpIHx8IGNhbGVuZGFyQ3VyZW50LmdldFRpbWUoKS5lcXVhbHModGltcFNwZWNpZmljRGF0ZSkpIHsKICAgICAgICAgICAgICAgIGNhbGVuZGFyQ3VyZW50LmFkZChDYWxlbmRhci5IT1VSX09GX0RBWSwgbnVtYXJPcmUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZm9ybWF0UmVjdXJlbnQuZm9ybWF0KGNhbGVuZGFyQ3VyZW50LmdldFRpbWUoKSk7CgogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0YSBudSBlc3RlIGluIGZvcm1hdHVsIGNlcnV0ISIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9Cn0KCnB1YmxpYyBjbGFzcyBNYWluIHsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICBFdmVuaW1lbnRSZWN1cmVudCBlciA9IG5ldyBFdmVuaW1lbnRSZWN1cmVudCgiMjAxOS0wMy0wOSAyMjo0NjowMCIsCiAgICAgICAgICAgICAgICAiMjAxOS0wMy0wOSAyMzowMDowMCIsICJTY3JpcyBwcm9ibGVtZSIsIDI0KTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZXIudXJtYXRvcnVsRXZlbmltZW50KCIyMDE5LTA0LTE5IDIyOjQ2OjIzIikpOwogICAgICAgIC8vIDIwMTktMDQtMjAgMjI6NDY6MDAKICAgIH0KfQ==