带负值的时间计算结果是Java

时间:2014-08-22 09:02:28

标签: java time

我想计算开始时间和结束时间之间的差异。以HH:mm格式。

例如,如果开始时间为22.00,结束时间为1.00,则会收到负值。

如何让程序知道第二天的结束时间?

我的剧本:

public void setBeginTijd()
{
    String dateStart = "22:00";
    String dateEnd = "1:00";

    SimpleDateFormat format = new SimpleDateFormat("HH:mm");

    Date d1 = null;
    Date d2 = null;

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

        long diff = d2.getTime() - d1.getTime();
        long diffMinutes = diff / (60 * 1000) % 60;
        long diffHours = diff / (60 * 60 * 1000) % 24;

        System.out.println(diffMinutes);
        System.out.println(diffHours);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

5 个答案:

答案 0 :(得分:6)

如果您假设那么,当时间为负时,第二次必须在第二天,那么您可以简单地说

if (diff < 0)
{
    diff = (24 * 60 * 60 * 1000) + diff;
}

编辑详细说明这一点,也是为了回应评论:当然这是一个非常简单的解决方案。它无法处理第二个日期是两天后的情况。它不处理DST开关。它不处理time zone change on December 31st, 1927 in Shanghai。它不能替代正确建模的日期及其所有警告。这是一种尽力而为的方法,可以(可能)从给定的信息中得出什么。

答案 1 :(得分:1)

试试这个

    SimpleDateFormat formatNextDay = new SimpleDateFormat("dd:HH:mm");
    boolean isNextDay=false;
    try {
        if (d1.after(d2)) {
            isNextDay=true; 
            d1 = formatNextDay.parse("1:" + dateStart);
            d2 = formatNextDay.parse("2:" + dateEnd);
        }

答案 2 :(得分:0)

您应该在日期中包含日期,月份和年份。

这是运行程序后Java中的日期:

d1 = Thu Jan 01 22:00:00 CET 1970
d2 = Thu Jan 01 01:00:00 CET 1970

答案 3 :(得分:0)

正如一些人已经提到的,重要的是要知道每个事件的日期,月份和年份,以计算不在同一天的事件的时间段。

我按照我认为可以帮助您的方式修改了您的方法:

public void setBeginTijd()
{
        String dateStart = "22.08.2014 22:00";
        String dateEnd = "25.08.2014 01:00";

        SimpleDateFormat fullFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm");

        Date d1 = null;
        Date d2 = null;

        try
        {
            d1 = fullFormat.parse(dateStart);
            d2 = fullFormat.parse(dateEnd);

            long diff = d2.getTime() - d1.getTime();
            long diffMinutes = diff / (60 * 1000) % 60;
            long diffHours = diff / (60 * 60 * 1000) % 24;
            long diffDays = diff / (24 * 60 * 60 * 1000);

            System.out.println("Delta minutes: " + diffMinutes);
            System.out.println("Delta hours: " + diffHours);
            System.out.println("Delta days: " + diffDays);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
}

答案 4 :(得分:0)

以下是小时和时间差的正确数学运算。分钟。当您操作int / long值时,会自动发生小数部分的剥离。

long diff = d2.getTime() - d1.getTime();
long diffHours = diff / 1000 / 60 / 60;
long diffMinutes = diff / 1000 / 60 - diffHours * 60;