Java 以小时:分钟:秒为单位计算两个日期之间的差值?
如何计算两个日期之间的差异并以小时:分钟:秒的格式显示 例如:Java 以小时:分钟:秒为单位计算两个日期之间的差值?,java,android,Java,Android,如何计算两个日期之间的差异并以小时:分钟:秒的格式显示 例如: 开始时间:2016-12-20T04:30 结束时间:2016-12-22T05:00 输出应为“48小时30分钟0秒” 这就是我尝试过的: Long diff=(endDate.get time()-startDate.gettime())/1000; Log.d(“应用程序”,“小时差为”+diff/1000/60/60); 分钟=diff/1000/60; 秒=diff/1000; 使用这段代码,我得到了正确的小时数。但是
开始时间:2016-12-20T04:30
结束时间:2016-12-22T05:00
输出应为“48小时30分钟0秒”
这就是我尝试过的:
Long diff=(endDate.get time()-startDate.gettime())/1000;
Log.d(“应用程序”,“小时差为”+diff/1000/60/60);
分钟=diff/1000/60;
秒=diff/1000;
使用这段代码,我得到了正确的小时数。但是分钟和秒的值没有得到正确的值。试试看
1。首先添加以下方法,然后使用parseDate
Date startDate = parseDate("2016-12-20T04:30");
Date endDate = parseDate("2016-12-22T05:00");
2.计算这两个变量的差值
long differenceInMillis = endDate.getTime() - startDate.getTime();
3.使用formatElapsedTime方法处理格式化差异
String formattedText = formatElapsedTime(differenceInMillis/1000); //divide by 1000 to get seconds from milliseconds
//Result will be 48hours 30minutes 0 seconds
public static Date parseDate (String strDate) {
DateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd'T'HH:mm");
Date date1 = null;
try {
date1 = dateFormat.parse (strDate);
}
catch (ParseException e) {
e.printStackTrace ();
}
return date1;
}
public static String formatElapsedTime (long seconds) {
long hours = TimeUnit.SECONDS.toHours(seconds);
seconds -= TimeUnit.HOURS.toSeconds (hours);
long minutes = TimeUnit.SECONDS.toMinutes (seconds);
seconds -= TimeUnit.MINUTES.toSeconds (minutes);
return String.format ("%dhr:%dmin:%dsec", hours, minutes, seconds);
}
尝试此功能:-
//1 minute = 60 seconds
//1 hour = 60 x 60 = 3600
//1 day = 3600 x 24 = 86400
public void printDifference(Date startDate, Date endDate){
//milliseconds
long different = endDate.getTime() - startDate.getTime();
System.out.println("startDate : " + startDate);
System.out.println("endDate : "+ endDate);
System.out.println("different : " + different);
long secondsInMilli = 1000;
long minutesInMilli = secondsInMilli * 60;
long hoursInMilli = minutesInMilli * 60;
long daysInMilli = hoursInMilli * 24;
//long elapsedDays = different / daysInMilli;
//different = different % daysInMilli;
long elapsedHours = different / hoursInMilli;
different = different % hoursInMilli;
long elapsedMinutes = different / minutesInMilli;
different = different % minutesInMilli;
long elapsedSeconds = different / secondsInMilli;
System.out.printf(
"%d hours, %d minutes, %d seconds%n",
elapsedHours, elapsedMinutes, elapsedSeconds);
}
使用新API对旧问题的新答案:
java.time
您可以编写一个方法,将日期时间实际接受为String
s以及时区,然后通过为此目的设计的类计算差值:java.time.Duration
下面是一个代码示例:
publicstaticstringgetdifference(stringfirstdt、stringseconddt、stringzone){
//为计算创建分区只是为了遵守夏令时
ZoneId ZoneId=ZoneId.of(区域);
//然后解析传递的日期时间并添加时区
ZonedDateTime firstZdt=ZonedDateTime.of(
解析(firstDt),zoneId
);
ZonedDateTime secondZdt=ZonedDateTime.of(
LocalDateTime.parse(secondDt),zoneId
);
//计算两个日期时间之间的持续时间
持续时间;
/*
*持续时间的JavaDocs告诉我们:
*
*“这种方法的结果可能是负周期
*如果结束早于开始。”。
*
*因此,我们需要确保较旧的日期时间
*方法“介于(开始,结束)”中的“开始”
*/
如果(第一个ZDT.isAfter(第二个ZDT)){
持续时间=持续时间之间(第二个ZDT,第一个ZDT);
}否则{
持续时间=持续时间。介于(第一个ZDT,第二个ZDT)之间;
}
//存储持续时间的完整小时数
长时间间隔;
hoursBetween=持续时间。到小时();
//计算完整持续时间剩余的分钟数(以分钟为单位)
时间间隔很长;
minutesBetween=持续时间.toMinutes()-(hoursBetween*60);
//计算完整持续时间剩余的秒数(以秒为单位)
中间有很长的一段时间;
secondsBetween=duration.getSeconds()-(duration.toMinutes()*60);
//构建结果字符串,注意可能缺少前导零
StringBuilder resultBuilder=新建StringBuilder();
resultBuilder.append(hoursbever.append(“小时”);
if(分钟间隔<10和分钟间隔>0)
resultBuilder.append(“0”);
resultBuilder.append(minutesBetween.append(“分钟”);
如果(介于<10和>0之间的秒数)
resultBuilder.append(“0”);
resultBuilder.append(secondsBetween.append(“秒”);
返回resultBuilder.toString();
}
如果在main
中使用它
publicstaticvoidmain(字符串[]args){
字符串timeDiff=getDifference(“2016-12-20T04:30”、“2016-12-22T05:00”、“UTC”);
系统输出打印项次(timeDiff);
}
。。。您将获得以下输出:
48小时30分0秒
上面的代码将在Java 8中使用,稍后,Duration
获得了方法toHoursPart()
、toMinutesPart()
和toSecondsPart()
,这些方法实际上在内部进行了必要的计算
将要更改的代码(使用Java 11进行了尝试):
//存储持续时间的完整小时数
长时间间隔;
hoursbween=duration.toHoursPart();
//计算完整持续时间剩余的分钟数(以分钟为单位)
时间间隔很长;
minutesBetween=duration.toMinutesPart();
//计算完整持续时间剩余的秒数(以秒为单位)
中间有很长的一段时间;
secondsBetween=duration.toSecondsPart();
到目前为止您尝试了什么???搜索googleLong diff=(endDate.get time()-startDate.gettime())/1000 Log.d(“应用程序”,“小时差为”+diff/1000/60/60)min=diff/1000/60秒=diff/1000。。使用这个代码,我得到了正确的小时数。但是分钟和秒的值不正确使用上述代码:2016-12-20T04:30 2016-12-22T05:00对于上述两个输入,我得到的答案是485000小时0秒。。。相反,我应该得到48小时30分钟0秒我在转换毫秒,我把它除以1000得到秒,然后计算小时,分钟和秒。
import java.util.Calendar;
public class DateDifferenceExample {
public static void main(String[] args) {
// Creates two calendars instances
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
// Set the date for both of the calendar instance
cal1.set(2006, Calendar.DECEMBER, 30);
cal2.set(2007, Calendar.MAY, 3);
// Get the represented date in milliseconds
long millis1 = cal1.getTimeInMillis();
long millis2 = cal2.getTimeInMillis();
// Calculate difference in milliseconds
long diff = millis2 - millis1;
// Calculate difference in seconds
long diffSeconds = diff / 1000;
// Calculate difference in minutes
long diffMinutes = diff / (60 * 1000);
// Calculate difference in hours
long diffHours = diff / (60 * 60 * 1000);
// Calculate difference in days
long diffDays = diff / (24 * 60 * 60 * 1000);
System.out.println("In milliseconds: " + diff + " milliseconds.");
System.out.println("In seconds: " + diffSeconds + " seconds.");
System.out.println("In minutes: " + diffMinutes + " minutes.");
System.out.println("In hours: " + diffHours + " hours.");
System.out.println("In days: " + diffDays + " days.");
}
}