在java中两次之间的正确格式

时间:2016-04-25 18:02:35

标签: java datetime netbeans time jodatime

我正在尝试计算java中两次之间的小时数。我正在使用joda时间库来格式化它。该程序可以拉动在文本框和文本框中输入的时间。把它们放在localTime变量中:

ListView

然后,开始按钮执行以下操作

LocalTime startTime1;
LocalTime airTime1;
LocalTime foamTime1;
LocalTime scTime1;

然后我想计算airTime1和startTime1&之间的时间。我正在尝试使用以下内容:

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());

剩余1应该保持airTime1&之间的持续时间值。 startTime1。然后,剩余将写入图像

DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm");
Minutes difference = ((Minutes.minutesBetween(airTime1,startTime1)));
LocalTime remaining1 = formatter.parseLocalTime(difference);

我最终得到的错误是分钟无法转换为字符串。我需要使用哪种变量类型才能使其工作?

由于

1 个答案:

答案 0 :(得分:0)

您遇到的根本问题是持续时间是与实际日期时间不同的概念。行

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, 100);
g.dispose();