J
javagast
Gast
hallo liebe java gemeinde,
ich muss ein zeiterfassung umsetzten. in dieser zeiterfassung kann der benutzer zeiten für einen tag erfassen die auch in den nächsten tag reichen, also über 00:00 hinaus.
beispiele:
7.5 10:00 bis 7.5 14:00
7.5 22:00 bis 8.5 01:00
8.5 04:00 bis 5.5 10:00
das beispiel zeigt keien überscheidungen!
ich habe soweit das ganze auch umgesetzt.
mein problem ist aber wenn der benutzer z.b den datensatz 7.5 22:00 bis 8.5 01:00 ändert auf 7.5 22:00 bis 8.5 05:00
erkennt er nicht eine überschneidung. das liegt an folgendem:
ich übergebe meiner methode eine liste mit allen zeiten für den tag in dem die neue zeit eingefügt werden soll z.b 10:00 bis 14:00 (String[]) und 22:00 bis 01:00 (auch String[]). beide zeiten liegen in dem tag bzw. die zweite beginnt in dem tag.
ich habe ein array mit 1440 stellen (1 tag als minuten) und schreibe alle zeiten für den tag in das array mit einsen (1)
z.B 10:00 bis 14:00 = arraystelle 600 bis 840 und für die zweite zeit in diesem konkreten beispiel 1320 (22:00) bis 1439 (23:59).
dann nehme ich die neue zeit z.b 7.5 21:00 bis 7.5 23:00 und trage diese auch ein 1260 (21:00) bis 1360 (23:00). dardurch erhöht sich die anzahl an den einzelnen arraystellen um 1. folge an den stellen für 22:00 bis 23:59 erhalte ich eine anzahl höher als 1. damit weiß ich wenn ich das array durchlaufe das eine überschneidung statt gefunden hat.
mein problem ist das wenn ich die zeit 7.5 22:00 bis 8.5 05:00 eintrage klappt das ganze nicht, weil ich nur explizit einen tag überprüfe. ich will ungern noch den zweiten tag in einen array abbilden.
gibt es vielelicht eine bessere einfacher lösung?
das scheint mir so nicht optimal.
anbei der quelltext:
vielen vielen dank.
grüße
ich muss ein zeiterfassung umsetzten. in dieser zeiterfassung kann der benutzer zeiten für einen tag erfassen die auch in den nächsten tag reichen, also über 00:00 hinaus.
beispiele:
7.5 10:00 bis 7.5 14:00
7.5 22:00 bis 8.5 01:00
8.5 04:00 bis 5.5 10:00
das beispiel zeigt keien überscheidungen!
ich habe soweit das ganze auch umgesetzt.
mein problem ist aber wenn der benutzer z.b den datensatz 7.5 22:00 bis 8.5 01:00 ändert auf 7.5 22:00 bis 8.5 05:00
erkennt er nicht eine überschneidung. das liegt an folgendem:
ich übergebe meiner methode eine liste mit allen zeiten für den tag in dem die neue zeit eingefügt werden soll z.b 10:00 bis 14:00 (String[]) und 22:00 bis 01:00 (auch String[]). beide zeiten liegen in dem tag bzw. die zweite beginnt in dem tag.
ich habe ein array mit 1440 stellen (1 tag als minuten) und schreibe alle zeiten für den tag in das array mit einsen (1)
z.B 10:00 bis 14:00 = arraystelle 600 bis 840 und für die zweite zeit in diesem konkreten beispiel 1320 (22:00) bis 1439 (23:59).
dann nehme ich die neue zeit z.b 7.5 21:00 bis 7.5 23:00 und trage diese auch ein 1260 (21:00) bis 1360 (23:00). dardurch erhöht sich die anzahl an den einzelnen arraystellen um 1. folge an den stellen für 22:00 bis 23:59 erhalte ich eine anzahl höher als 1. damit weiß ich wenn ich das array durchlaufe das eine überschneidung statt gefunden hat.
mein problem ist das wenn ich die zeit 7.5 22:00 bis 8.5 05:00 eintrage klappt das ganze nicht, weil ich nur explizit einen tag überprüfe. ich will ungern noch den zweiten tag in einen array abbilden.
gibt es vielelicht eine bessere einfacher lösung?
das scheint mir so nicht optimal.
anbei der quelltext:
Code:
private boolean methode(List<String[]> worktimes, String[] newWorktime){
int[] tArray = new int[1440];
for (int i = 0; i < worktimes.size(); i++) {
String[] sTime;
String[] eTime;
int sPos;
int ePos;
if(worktimes.get(i)[0].equals("")){
eTime = worktimes.get(i)[1].split(":");
sPos = 0;
ePos = (new Integer(eTime[0]) * 60) + new Integer(eTime[1]);
}
else if(worktimes.get(i)[1].equals("")){
sTime = worktimes.get(i)[0].split(":");
sPos = (new Integer(sTime[0]) * 60) + new Integer(sTime[1]);
ePos = 1439;
}
else{
sTime = worktimes.get(i)[0].split(":");
eTime = worktimes.get(i)[1].split(":");
sPos = (new Integer(sTime[0]) * 60) + new Integer(sTime[1]);
ePos = (new Integer(eTime[0]) * 60) + new Integer(eTime[1]);
}
for (int j = sPos; j <= ePos; j++) {
tArray[j] += 1;
}
}
String[] newSTime = newWorktime[0].split(":");
String[] newETime = newWorktime[1].split(":");
int newSPos = (new Integer(newSTime[0]) * 60) + new Integer(newSTime[1]);
int newEPos = (new Integer(newETime[0]) * 60) + new Integer(newETime[1]);
if(newSPos > newEPos){
newEPos = 1439;
}
for (int i = newSPos; i <= newEPos; i++) {
tArray[i] += 1;
}
//auswertung
for (int i = 0; i < tArray.length; i++) {
if(tArray[i] > 1 ){
System.out.println("überschenidung");
}
vielen vielen dank.
grüße