0

我必须得到两个小时之间的总分钟数。

17:00 and 16.06 hrs

如果我喜欢

 17.00-16.06 =0.94 

但正确答案是54 分钟

所以从逻辑上讲,我怎样才能从两次中获得不同的分钟数。

不使用 Calender api 或 Joda Time。

代码:

private  double getTimeDifference(Date startDate,Date endDate, boolean sameDay)
    {
                double startTimeF=Double.valueOf(startDate.getHours()+"."+startDate.getMinutes());
                double endTimeF=Double.valueOf(endDate.getHours()+"."+endDate.getMinutes());
                double totalTime=0;
                boolean isCalculated=false;
                for(double workTime:timeMap.keySet())
                {
                        double endTimeC=timeMap.get(workTime);

                        if(startTimeF>=workTime && startTimeF<=endTimeC)
                        {
                            if(endTimeF<endTimeC && sameDay)
                            {
                                isCalculated=true;
                                totalTime+=endTimeF-startTimeF;
                            }
                            else
                            {
                                totalTime+=endTimeC-startTimeF;
                            }
                            break;
                        }
                }

                for(double workTime:timeMap.keySet())
                {
                        double endTimeC=timeMap.get(workTime);
                        if(endTimeF>=workTime && endTimeF<=endTimeC)
                        {
                            if(!isCalculated)
                            {
                                if(workTime<startTimeF && sameDay)
                                {
                                    totalTime+=endTimeF-startTimeF;
                                }
                                else
                                {
                                    totalTime+=endTimeF-workTime;
                                }
                            }

                        }
                        else if(!sameDay)
                        {
                            totalTime+=endTimeC-workTime;
                        }
                }
                return totalTime;
    }

时间映射包含 json 字符串的键和值:

{"time":[{"startTime":"8:00", "endTime":"12:30", "type":"Working"},{"startTime":"12:31", "endTime" :"13:00", "type":"Break"},{"startTime":"13:01", "endTime":"17:00", "type":"Working"}]}

4

4 回答 4

3
long milliDifference = date1.getTime() - date2.getTime();
long minuteDifference = TimeUnit.MINUTES.convert(milliDifference, TimeUnit.MILLISECONDS);

其中 date1 和 date2 是 java.util.Date 类型。

于 2013-11-12T08:23:19.930 回答
2
    String firstTime = "17:00";
    String secondTime = "16:09";
    SimpleDateFormat format = new SimpleDateFormat("HH:mm");
    try {
        long diff = format.parse(firstTime).getTime() - format.parse(secondTime).getTime();
        System.out.println("Difference is " + (diff / (60 * 1000)) + " minutes.");
    } catch (ParseException e) {
        //Parsing error
    }

输出:

Difference is 51 minutes.
于 2013-11-12T08:24:47.470 回答
2

尝试:

    String from="17:00";
    String to="16:06";
    String fromTime[]=from.split(":");
    String toTime[]=to.split(":");
    int fromMin=Integer.parseInt(fromTime[0])*60+Integer.parseInt(fromTime[1]);
    int toMin=Integer.parseInt(toTime[0])*60+Integer.parseInt(toTime[1]);
    System.out.println("Difference "+(fromMin-toMin)+" minutes");
于 2013-11-12T08:24:59.687 回答
1

tl;博士

Duration.between( LocalTime.parse( "17:00" ) , LocalTime.parse( "16:06" ) )

java.time

麻烦的旧旧日期时间类现在被 java.time 类所取代。

该类LocalTime表示没有日期和时区的一天中的时间。

该类Duration跟踪未附加到时间线的时间跨度。您的 17:00 和 16:06 示例意味着负持续时间,进入过去。

LocalTime start = LocalTime.parse( "17:00" );
LocalTime stop = LocalTime.parse( "16:06" );  // Going backwards into the past for a negative duration.
Duration duration = Duration.between( start , stop );
于 2016-09-18T03:33:15.157 回答