2015-01-10 28 views
0

我有四个日期,我想获得总减去...Java的增加和时间

timeInAM = 9:00

timeOutAM = 12:00

timeInPM = 13:00

timeOutPM = 18:00

我想让total=(timeOutAM-timeInAM)+(timeOutPM-timeInPM)这将导致总= 8:00

,但它给了我'16:00:00'

这里就是我所做的: DATE

SimpleDateFormat tf24=new SimpleDateFormat("HH:mm"); 
Date timeInAM=new Date(); 
Date timeOutAM=new Date(); 
Date timeInPM=new Date(); 
Date timeOutPM=new Date(); 
long total; 

timeInAM=tf24.parse(tblWorkPeriod.getValueAt(i, 1).toString()); 
timeOutAM=tf24.parse(tblWorkPeriod.getValueAt(i, 2).toString()); 
timeInPM=tf24.parse(tblWorkPeriod.getValueAt(i, 3).toString()); 
timeOutPM=tf24.parse(tblWorkPeriod.getValueAt(i, 4).toString()); 
total=(timeOutAM.getTime()-timeInAM.getTime())+(timeOutPM.getTime()-timeInPM.getTime()); 
System.out.println(tf24.format(new Date(total))); 

日历

Calendar timeInAM=Calendar.getInstance(); 
Calendar timeOutAM=Calendar.getInstance(); 
Calendar timeInPM=Calendar.getInstance(); 
Calendar timeOutPM=Calendar.getInstance(); 
Calendar total=Calendar.getInstance(); 

SimpleDateFormat tf24=new SimpleDateFormat("HH:mm"); 

timeInAM.setTime(tf24.parse(tblWorkPeriod.getValueAt(i, 1).toString())); 
timeOutAM.setTime(tf24.parse(tblWorkPeriod.getValueAt(i, 2).toString())); 
timeInPM.setTime(tf24.parse(tblWorkPeriod.getValueAt(i, 3).toString())); 
timeOutPM.setTime(tf24.parse(tblWorkPeriod.getValueAt(i, 4).toString())); 
long sum=(timeOutAM.getTimeInMillis()-timeInAM.getTimeInMillis())+(timeOutPM.getTimeInMillis()-timeInPM.getTimeInMillis()); 
total.setTimeInMillis(sum); 
System.out.println("total : "+tf24.format(total.getTime())); 
+0

使用SimpleDateFormat格式化您的总时间 – zgc7009

+0

但它给了我错误的计算结果应该是8:00而不是16:00 – askManiac

+0

您使用的是什么版本的Java? –

回答

2

您可以试试JodaTime库(如果您可以使用其他库)。用下面你可以实现你所需要的,通过调用LocalTime::minusHours和类似的命令:

LocalTime timeInAM=new LocalTime(hourOfDay, minuteOfHour); 
LocalTime timeOutAM=new LocalTime(hourOfDay, minuteOfHour); 
LocalTime timeInPM=new LocalTime(hourOfDay, minuteOfHour); 
LocalTime timeOutPM=new LocalTime(hourOfDay, minuteOfHour); 

LocalTime amInterval = timeOutAM.minusHours(timeInAM.getHourOfDay()).minusMinutes(timeInAM.getMinuteOfHour()); 
LocalTime pmInterval = timeOutPM.minusHours(timeInPM.getHourOfDay()).minusMinutes(timeInPM.getMinuteOfHour()); 

LocalTime total = pmInterval.plusHours(amInterval.getHourOfDay()).plusMinutes(amInterval.getMinuteOfHour()); 

使用合适的DateTimeFormatter解析/打印的日期在本地时间

+0

什么是hoursOfDay?长? – askManiac

+0

hoursOfDay是代表** LocalTime **([参考](http://joda-time.sourceforge.net/apidocs/org/joda/time/LocalTime.html#getHourOfDay()))小时的_int_) 。如果你想要一个代表“2:30”的LocalTime,使用'new LocalTime(2,30)' – Nuno

+0

我在我的项目中导入了joda-time-2.6.jar,但'.minusHours'没有出现 – askManiac

0

我不敢肯定,如果我理解你的问题,但在这里:

你可以尝试使用:

double timeInAMint = Double.parseDouble(timeInAM); 
double timeOutAMint = Double.parseDouble(timeoutAM); 
double timeInPMint = Double.parseDouble(timeInPM); 
double timeOutPMint = Double.parseDouble(timeOutPM); 
double sum = timeInAMint + timeOutAMint + timeInPMint + timeOutPMint; 
System.out.println("Sum: " + sum); 
+0

我不认为这有助于处理时间? 那么如果timeinam是12:59而我加了1:52 – askManiac

0

尝试使用Calendar实例。

编辑:示例实现。

Calendar timeInBeforeBreak = Calendar.getInstance(); 
timeInBeforeBreak.clear(); 

Calendar timeOutBeforeBreak = Calendar.getInstance(); 
timeOutBeforeBreak.clear(); 

timeInBeforeBreak.add(Calendar.HOUR_OF_DAY, 9); 
timeInBeforeBreak.add(Calendar.MINUTE, 30); 
timeOutBeforeBreak.add(Calendar.HOUR_OF_DAY, 11); 
timeOutBeforeBreak.add(Calendar.MINUTE, 30); 

long timeMillis = timeOutBeforeBreak.getTimeInMillis() - timeInBeforeBreak.getTimeInMillis(); 

System.out.println("Hours :"+timeMillis/1000/60/60); 
+0

我试过使用日期和日历,但它给了我错误的计算 – askManiac

+0

你也可以发布你如何使用日历尝试吗? –

+0

好的,我已经eddited帖子:) – askManiac