我试图计算
java中两次之间的小时数.我正在使用joda时间库来格式化它.该程序可以拉动在文本框和文本框中输入的时间.把它们放在localTime变量中:
LocalTime startTime1; LocalTime airTime1; LocalTime foamTime1; LocalTime scTime1;
然后,开始按钮执行以下操作
DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm"); startTime1 = formatter.parseLocalTime(startField2.getText()); airTime1 = formatter.parseLocalTime(airField.getText()); foamTime1 = formatter.parseLocalTime(fTimeField2.getText()); scTime1 = formatter.parseLocalTime(remainingField2.getText());
然后我想计算airTime1和startTime1&之间的时间.我正在尝试使用以下内容:
DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm"); Minutes difference = ((Minutes.minutesBetween(airTime1,startTime1))); LocalTime remaining1 = formatter.parseLocalTime(difference);
剩下的1应该保持airTime1&之间的持续时间值. startTime1.然后剩余将写入图像
Graphics g = image2.getGraphics(); g.setFont(g.getFont().deriveFont(30f)); g.drawString((String.valueOf(remaining1)),100,100); g.dispose();
我最终得到一个错误,即分钟无法转换为字符串.我需要使用哪种变量类型才能使其工作?
谢谢
解决方法
您遇到的根本问题是持续时间是与实际日期时间不同的概念.线条
Minutes difference = ((Minutes.minutesBetween(airTime1,startTime1))); LocalTime remaining1 = formatter.parseLocalTime(difference);
没有意义,因为将持续时间转换为日期时间的想法没有意义.什么是代表“3分钟”的日期时间?我能想象的最接近的事情是一对日期时间,一个用于开始,一个用于结束,但这就是你已经拥有的.
Minutes表示(或者可能是the Hours representation,基于您声明的用例)实际上是您想要的,我认为您只是过度思考它.无需进一步转换,只需使用它来构建您想要的字符串:
// Get difference,same as before Minutes difference = ((Minutes.minutesBetween(airTime1,startTime1))); // Create string representation of difference // (Minutes.toString() representation exists but is hard to read) String diffStr = difference.getMinutes() / 60.0 + " hours" // for,e.g.,"3.5 hours" // Re-use your old graphics code with new string Graphics g = image2.getGraphics(); g.setFont(g.getFont().deriveFont(30f)); g.drawString(diffStr,100); g.dispose();