我的时差显示输出不正确,我正在尝试计算startTime和endTime之间的时差。
Date time1, time2;
long difference;
SimpleDateFormat df = new SimpleDateFormat("HH:mm");
public Time(String startTime, String endTime)
{
this.startTime = startTime;
this.endTime = endTime;
time1 = new Time("16:30", "18:00"); //example
try
{
time1 = df.parse(startTime);
time2 = df.parse(endTime);
}
catch(Exception e) {
System.out.println("invalid time");
}
}
public String getDifference()
{
difference = (time2.getTime() - time1.getTime());
return df.format(difference); //output = 02:30, should be 01:30
}
我知道Joda-Time可以让这更容易,但我不应该使用任何其他库。
答案 0 :(得分:3)
它正确计算差异为5400000毫秒(1.5小时),但由于我认为是时区,因此将其格式化为02:30。
在构造函数中添加此行以将日期格式设置为UTC时区,并且应该按预期输出01:30:
df.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));
答案 1 :(得分:1)
时间是自称为纪元的时刻以来的毫秒数。在您的代码中,您计算时刻之间的差异,然后将结果解释为时间戳,但事实并非如此。
计算结果是两个时间戳之间的差异(以毫秒为单位)。如果您希望以小时和分钟打印,请执行以下操作:
public String getDifference() {
difference = (time2.getTime() - time1.getTime()) / 1000L;
long hours = difference/3600;
difference %= 3600;
long minutes = difference/60;
difference %= 60;
long seconds = difference;
return String.format("%d:%02d:%02d", hours, minutes, seconds);
}
答案 2 :(得分:1)
java.util
的日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern date-time API。
演示:
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("H:m", Locale.ENGLISH);
LocalTime begin = LocalTime.parse("16:30", dtf);
LocalTime end = LocalTime.parse("18:00", dtf);
Duration duration = Duration.between(begin, end);
System.out.println(duration);
// Custom format
// ##########################################Java-8##########################################
System.out.println(String.format("%d:%d", duration.toHours(), duration.toMinutes() % 60));
// ##########################################################################################
// ##########################################Java-9##########################################
System.out.println(String.format("%d:%d", duration.toHoursPart(), duration.toMinutesPart()));
// ##########################################################################################
}
}
输出:
PT1H30M
1:30
1:30
从 Trail: Date Time 了解现代日期时间 API。