【问题标题】:How to get hour/minute difference in java如何在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"}]}

【问题讨论】:

  • 请向我们展示您尝试过的代码。
  • 尝试将答案转换为分钟stackoverflow.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 不支持它。

标签: java


【解决方案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 );
    

    【讨论】:

      猜你喜欢
      • 2019-07-03
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多