我在解析日期和时间以获取Java的总时数和分钟数时遇到问题。

如果我计算从“星期一22:00”到“星期二22:00”开始的总时间,那么我会得到正确的总时间24。但是,如果我计算从“星期三22:00”到当前日期和时间的总时间,例如“星期四12:45”,然后我得到的是“小时:-153分钟:-15”。

仅在星期三和星期四是这种情况。在剩下的日子里,它工作正常。

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.TimeUnit;

public class Test {

    private static DateFormat dateFormat = new SimpleDateFormat("EEE HH:mm");
    private static DateFormat dayFormat = new SimpleDateFormat("E");
    private static Calendar calendar = Calendar.getInstance();

    public static void main(String[] args) {

        try {

            Date date1 = dateFormat.parse("Wed 22:00");
            Date date2 = dateFormat.parse(dayFormat.format(calendar.getTime()) + " " + calendar.getTime().getHours() + ":"
                    + calendar.getTime().getMinutes());

            long hours2 = getDurationInHours(date1, date2);
            long min = getDurationInMin(date1, date2);

            System.out.println("Hours : " + hours2 + " Min : " + min);

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

    public static long getDurationInHours(Date returnTime, Date leaveTime) {
        long durationInMillis = leaveTime.getTime() - returnTime.getTime();
        long hours = TimeUnit.MILLISECONDS.toHours(durationInMillis);
        return hours;
    }

    public static long getDurationInMin(Date returnTime, Date leaveTime) {
        long durationInMillis = leaveTime.getTime() - returnTime.getTime();
        long min = TimeUnit.MILLISECONDS.toMinutes(durationInMillis) % 60;
        return min;
    }

}

最佳答案

这是因为当您将日期定义为22:00星期三时,不是当前一周的星期三。实际上是1970年1月7日;)

如您所知,java中的日期从1970年1月1日开始就作为长整数使用。因此,当您说星期三而不是实际日期时,它将获得1970年之后的第一个星期三,即第七个星期三。当您说星期一22:00时,它可以正常工作,因为它使用的是1970年1月5日,并且相差2天。

当您以相同的逻辑使用“ Thu 22:00”时,它使用的是1970年1月1日(星期四),因此您得到负数。因为实际上要提前六天

10-01 06:01
查看更多