如何在Java中计算日期和时间差

Java中的日期不同

在本教程中,我们向您展示2个示例来计算Java中的日期/时间差:

  1. 手动时间计算。
  2. 乔达时间图书馆。

1.手动时间计算

转换Date (毫秒),并使用以下规则计算两个日期之间的差:

1000 milliseconds = 1 second
60 seconds = 1 minute
60 minutes = 1 hour
24 hours = 1 day
DateDifferentExample.java
package com.mkyong.date;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDifferentExample {

	public static void main(String[] args) {

		String dateStart = "01/14/2012 09:29:58";
		String dateStop = "01/15/2012 10:31:48";

		//HH converts hour in 24 hours format (0-23), day calculation
		SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

		Date d1 = null;
		Date d2 = null;

		try {
			d1 = format.parse(dateStart);
			d2 = format.parse(dateStop);

			//in milliseconds
			long diff = d2.getTime() - d1.getTime();

			long diffSeconds = diff / 1000 % 60;
			long diffMinutes = diff / (60 * 1000) % 60;
			long diffHours = diff / (60 * 60 * 1000) % 24;
			long diffDays = diff / (24 * 60 * 60 * 1000);

			System.out.print(diffDays + " days, ");
			System.out.print(diffHours + " hours, ");
			System.out.print(diffMinutes + " minutes, ");
			System.out.print(diffSeconds + " seconds.");

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

结果

1 days, 1 hours, 1 minutes, 50 seconds.
为什么秒和分钟需要%60,小时需要%24?

如果您将其更改为

long diffSeconds = diff / 1000;

结果将是

1 days, 1 hours, 1 minutes, 90110 seconds.

90110 ”是date1date2之间的总秒数差,如果您只想知道以秒为单位的秒数差,这是正确的。

要以“ 日,时,分,秒 ”格式显示差异,应使用模数(%60)截断剩余的秒数( 90060 )。 得到它了? 该想法同样适用于分钟(%60)和小时(%24)。

90110 % 60 = 50 seconds (you want this)
90110 - 50 = 90060 seconds (you dont want this)

2. Joda时间示例

这是等效的示例,但是使用Joda时间来计算两个日期之间的差异。

PS此示例使用的是joda-time-2.1.jar

JodaDateDifferentExample.java
package com.mkyong.date;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Hours;
import org.joda.time.Minutes;
import org.joda.time.Seconds;

public class JodaDateDifferentExample {

  public static void main(String[] args) {

	String dateStart = "01/14/2012 09:29:58";
	String dateStop = "01/15/2012 10:31:48";

	SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

	Date d1 = null;
	Date d2 = null;

	try {
		d1 = format.parse(dateStart);
		d2 = format.parse(dateStop);

		DateTime dt1 = new DateTime(d1);
		DateTime dt2 = new DateTime(d2);

		System.out.print(Days.daysBetween(dt1, dt2).getDays() + " days, ");
		System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, ");
		System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, ");
		System.out.print(Seconds.secondsBetween(dt1, dt2).getSeconds() % 60 + " seconds.");

	 } catch (Exception e) {
		e.printStackTrace();
	 }

  }

}

结果

1 days, 1 hours, 1 minutes, 50 seconds.

如果您有其他选择,请在下面评论🙂

参考文献

  1. 维基百科第二名
  2. 乔达时间官方网站

翻译自: https://mkyong.com/java/how-to-calculate-date-time-difference-in-java/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值