Java使用不同的日期减去时间

时间:2014-07-14 05:59:29

标签: java date time simpledateformat

我想减去并获得这两个日期的小时数:

  • 时间:2014年1月1日下午5:45
  • 超时:2014年1月2日上午2:00

我已经尝试过使用这个公式,我总是得到一个负数。 (例如:-5:0-30)

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

6 个答案:

答案 0 :(得分:1)

您可以尝试这样:

Date d1= // start date 
Date d2= // end date 
long dur = d1.getTime() - d2.getTime();

long diffInSec = TimeUnit.MILLISECONDS.toSeconds(dur);
long diffInMin = TimeUnit.MILLISECONDS.toMinutes(dur);
long diffInHour = TimeUnit.MILLISECONDS.toHours(dur);

答案 1 :(得分:0)

see reference

使用Math.abs(argument here)查找其绝对值

Math.abs(175)=175
Math.abs(-184)=184
Math.abs(-0)=0

答案 2 :(得分:0)

不知道这会有多大帮助,但从我的excel日子开始,我经常使用这个技巧。您可以设置if语句来检查当天是否发生变化,然后执行(12-预约时间)+(12预订关闭时间)的总和。

我确信有更简单的方法可以做到这一点,但我无法在一分钟内访问我的电脑,因此无法试验您的公式。

您也可以随时查看日期时间格式,并将其格式化为时间。 hh:mm然后再次执行if以检查当天的变化。

答案 3 :(得分:0)

您可以尝试这样的事情

    DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
    Date day1=df.parse("2014-01-01 5:45:00 PM"); // start date
    Date day2=df.parse("2014-01-02 2:00:00 AM"); // end date

    long milliseconds=day2.getTime()-day1.getTime(); // time gap in mil-seconds 

    int seconds = (int) (milliseconds / 1000) % 60 ;
    int minutes = (int) ((milliseconds / (1000*60)) % 60);
    int hours   = (int) ((milliseconds / (1000*60*60)) % 24);

答案 4 :(得分:0)

U还可以使用SimpleDateFormat计算时差: 这是示例代码:

SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy HH:mm a");
        System.out.println(""+sdf.format(new Date()));
        String dateStart ="Jan 1 2014 5:45 PM", dateStop="Jan 2 2014 2:00 AM";

        try {
            Date d1 = sdf.parse(dateStart);
            Date d2 = sdf.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);
                        diffHours = diffHours+24*diffDays;
//          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();
        }

答案 5 :(得分:0)

您可以使用Apache Commons javadoc here

String formatPeriod = DurationFormatUtils.formatPeriod(dateAsMilis1,
            dateAsMilis2), "HH:mm:ss:SSS");