如何在java中获得小时/分钟差异

Posted

技术标签:

【中文标题】如何在java中获得小时/分钟差异【英文标题】:How to get hour/minute difference in java 【发布时间】:2013-11-24 07:08:40 【问题描述】:

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

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字符串的key和value:

"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"]

【问题讨论】:

请向我们展示您尝试过的代码。 类似于问题How to calculate elapsed time from now with Joda Time?。 尝试将答案转换为分钟***.com/questions/5387371/… 请不要多次使用浮点变量。 16.06 作为浮点数表示 16 个单位和百分之六。但是,作为时间,它意味着 16 个单位(小时)和 6 个第六十(分钟)。 如果你坚持这种表示,你应该转换它,即 6 分钟是 60 分钟的 1/10,所以你应该将 16h06 存储为16.10。然后您可以减去得到(17.0 - 16.1) = 0.9 小时,即0.9 * 60 = 54 分钟。但是,如果您想让自己轻松一点并避免数小时的错误搜索,只需使用 DateTime 类型 - 这就是它们的用途。 我不能使用 Joda 时间,因为 GWT 不支持它。 【参考方案1】:
long milliDifference = date1.getTime() - date2.getTime();
long minuteDifference = TimeUnit.MINUTES.convert(milliDifference, TimeUnit.MILLISECONDS);

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

【讨论】:

GWT 不支持 TimeUnit。第 80 行:没有可用于类型 java.util.concurrent.TimeUnit 的源代码;你忘了继承一个必需的模块吗? 确定只需要将 java.util.concurrent.TimeUnit 添加到 GWT 模块的 XML 描述符中? 不,它只支持这个工具。 gwtproject.org/doc/latest/… 不支持,但这个我不知道。谢谢你的回答。【参考方案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");

【讨论】:

【参考方案3】:
    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.

【讨论】:

FOR Minute,删除 %60,它将给出秒而不是分钟,请更改为 ((diff / 1000)*60) 不,不会。 getTime() 方法返回毫秒值。如果您将毫秒除以 1000,它将给出秒数,如果您还将秒数除以 60,它将给出分钟数。因为 1000 毫秒对应 1 秒,60 秒对应 1 分钟。所以 1 分钟意味着 60*1000 = 60000 毫秒。使用您的解决方案 ((diff / 1000)*60),您的意思是 60 分钟(即 1 小时)对应于 1000 毫秒。 还有大约 %60,我之所以这么说只是因为乍一看,我认为您会花费相同的小时数但不同的分钟数。现在我删除了它,它仍然可以工作。【参考方案4】:

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 );

【讨论】:

以上是关于如何在java中获得小时/分钟差异的主要内容,如果未能解决你的问题,请参考以下文章

如何获得以秒或分钟或小时为单位的时差? [复制]

如何在oracle中减去2个日期以获得小时和分钟的结果

如何在postgreSQL中获得精确的日期差异?

如何在java中获得白天的均值和标准差

如何获得一定秒数的年数、月数、天数、小时数和分钟数?

如何获得两个日期的时差,例如 x 天 y 小时 z 秒 t 分钟 [重复]