如何在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中获得小时/分钟差异的主要内容,如果未能解决你的问题,请参考以下文章