知名网站建设定制java计算两个时间相差多少小时

知名网站建设定制最近有个需求,知名网站建设定制根据两个时间,知名网站建设定制计算两个时间之间相差多少个小时。

查了一下,网上有现成的工具类

摘出自己需要的。得到下面这个

  1. private int getDifferHour(Date startDate, Date endDate) {
  2. long dayM = 1000 * 24 * 60 * 60;
  3. long hourM = 1000 * 60 * 60;
  4. long differ = endDate.getTime() - startDate.getTime();
  5. long hour = differ % dayM / hourM;
  6. return Integer.parseInt(String.valueOf(hour));
  7. }

但是自己测试了以后才发现,当两个时间超过一天以上,就会有问题。

 设置两个时间小时数相同,天的日期不同,结果得到的结果却是:0

回过头看一下这个工具类,思路其实很明了,就是先根据Date类的getTime() 方法获取到两个时间的毫秒数,然后计算出两个日期的毫秒数之差。按理说,只要两个毫秒数之差  除以 天 再除以 小时的毫秒数,就能得到两个时间相差的小时数。

一天的毫秒数是1000 * 24 * 60 * 60,一个小时的毫秒数1000 * 60 * 60(1 秒 = 1000毫秒,一小时 = 60 分钟 * 60 秒 * 1000 毫秒)

但是上图中的计算方式 

 long hour = differ % dayM / hourM

却是先求余再取整,differ % dayM 在取余的时候把整数给舍弃了,所以当相隔天数大于一天的的时候,天数这个值竟然被我舍弃了

舍弃一天,就舍弃24小时,那肯定是不对的。基于上面的方式,修改一下即可。

  1. // 24 * (differ / dayM) 这里拿到被舍弃的整数,整数是几,就代表相隔几天,一天24小时,那就整数乘以24即可。
  2. private static int getDifferHour(Date startDate, Date endDate) {
  3. long dayM = 1000 * 24 * 60 * 60;
  4. long hourM = 1000 * 60 * 60;
  5. long differ = endDate.getTime() - startDate.getTime();
  6. long hour = differ % dayM / hourM + 24 * (differ / dayM);
  7. return Integer.parseInt(String.valueOf(hour));
  8. }


另外有个小插曲,根据下面这个方式测试的时候,当把起始日期parse1和结束日期parse2分别改成

2021-08-27 12:00:00 
2021-08-27 14:00:00

得到的答案竟然是14,也就是12:00:00变成了00:00:00 

 观察一下,发现原来是simpleDateFormat 实例化的时候,小时,使用小写的h。这就涉及到另一个知识点了。关于SimpleDateFormat对象参数的大小写问题。HH 代表24小时制hh 代表12小时制。在12小时制中,12点会被当成0点处理。所以将hh改成 HH就可以了
 

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发