使用java减去时间1:10和2:15后,我得到的输出为毫秒,即毫秒-3900000。然后我将此毫秒转换为时间格式,然后生成的输出为 输出:-01:-05:00。
我期待的输出就像-01:05:00。 输出中只应有一个负号
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
public class TimeAddition {
public static void main(String args[]) throws ParseException {
String b = "1:10";
String a = "2:15";
// converting String time into dateTime
DateFormat sdf = new SimpleDateFormat("hh:mm");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date bTime = sdf.parse(b);
Date aTime = sdf.parse(a);
long totalTime = bTime.getTime() - aTime.getTime();
System.out.println("Total time in millisecond = " + totalTime);
long millis = totalTime;
String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis)
- TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis)
- TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
System.out.println("Time format " + hms);
}
}
产生的产出: 总时间(毫秒)= -3900000 时间格式-1:-5:00
预期时间格式= -01:05:00
答案 0 :(得分:2)
你应该做那样的事情:
Maths.abs
)。 给出了:
String sign = totalTime < 0 ? "-":"";
long millis = totalTime < 0 ? -totalTime:totalTime;
String hms = String.format("%s%02d:%02d:%02d", sign, TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis)
- TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis)
- TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
答案 1 :(得分:0)
只需更改此代码:
TimeUnit.MILLISECONDS.toMinutes(millis)
- TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis))
到此代码:
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)) - TimeUnit.MILLISECONDS.toMinutes(millis)
答案 2 :(得分:0)
您也可以使用这种方法轻松获得时差。
public static void main(String[] args)
{
String time1 = "01:10:00";
String time2 = "02:15:00";
String finalDiff;
try{
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
Date date1 = format.parse(time1);
Date date2 = format.parse(time2);
long difference = date1.getTime() - date2.getTime();
Date d;
if(difference<0) {
d = new Date(-1*difference);
finalDiff = "-"+ format.format(d);
}
else{
d = new Date(difference);
finalDiff = format.format(d);
}
System.out.println(finalDiff);// gives the difference as required by you.
}catch(Exception e){}
}
答案 3 :(得分:0)
Date
和SimpleDateFormat
都是老式的,不适合此目的。它们用于某个时间点及其在某个时区的表示,从不在一段时间间隔内。我不习惯将它们用于后者,或者我至少会在运行不同时区的计算机上进行彻底的测试。
我的建议是使用新的java.time
包。尽管this answer的评论中讨论的事实是它不包括持续时间格式化程序。
String b = "1:10";
String a = "2:15";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("H:mm", Locale.ROOT);
LocalTime end = LocalTime.parse(b, dtf);
LocalTime start = LocalTime.parse(a, dtf);
Duration totalTime = Duration.between(start, end);
String sign;
if (totalTime.isNegative()) {
totalTime = totalTime.negated();
sign = "-";
} else {
sign = "";
}
long hours = totalTime.toHours();
totalTime = totalTime.minusHours(hours);
long minutes = totalTime.toMinutes();
totalTime = totalTime.minusMinutes(minutes);
long seconds = totalTime.getSeconds();
System.out.format("%s%d:%02d:%02d%n", sign, hours, minutes, seconds);
打印:
-1:05:00
价格是我们需要明确处理负区间。好消息是库类为我们做了所有计算:计算时间长度并转换为小时,分钟和秒。