如何在java中从两次中获取分钟数

如何在java中从两次中获取分钟数,java,date,time,date-format,Java,Date,Time,Date Format,我试图得到两个小时之间的差异,如下所示 String time1=“05:00 AM”; 字符串时间2=“06:20 AM”; 字符串格式=“HH:mm aa”; SimpleDataFormat sdf=新的SimpleDataFormat(格式); Date dateObj1=null; Date dateObj2=null; 试一试{ dateObj1=sdf.parse(time1); dateObj2=sdf.parse(time2); }捕获(解析异常){ e、 printStack

我试图得到两个小时之间的差异,如下所示

String time1=“05:00 AM”;
字符串时间2=“06:20 AM”;
字符串格式=“HH:mm aa”;
SimpleDataFormat sdf=新的SimpleDataFormat(格式);
Date dateObj1=null;
Date dateObj2=null;
试一试{
dateObj1=sdf.parse(time1);
dateObj2=sdf.parse(time2);
}捕获(解析异常){
e、 printStackTrace();
}
long diff=dateObj2.getTime()-dateObj1.getTime();
双压差=压差/((双)1000*60*60);
双diffInMins=(diffInHours+(int)diffInHours)*60;
转储到控制台

System.out.println ( "diff: " + diff );
System.out.println ( "diffInHours: " + diffInHours );
System.out.println ( "diffInMins " + diffInMins );
System.out.println ( "In UTC, from " + inputStart + " to " + inputStop + " is interval: " + interval + " and period: " + period + ", or " + period.getHours ( ) + " hours and " + period.getMinutes ( ) + " minutes. In total elapsed minutes: " + elapsedMinutes + "." );
跑步的时候

diffInHours 1.3333
分钟139.9999999997
我想计算两次之间的时间(以分钟为单位),就像在上面的例子中,我应该得到80分钟,但它给出了一些其他值


有人能帮我在两次通话之间留出几分钟吗?

使用Java 8时,它可能是这样的:

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("hh:mm a");
LocalTime t1 = LocalTime.parse(time1, fmt);
LocalTime t2 = LocalTime.parse(time2, fmt);
long minutes = ChronoUnit.MINUTES.between(t1, t2); //80

请注意,这并不考虑任何DST更改。

对于Java 8,它可能如下所示:

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("hh:mm a");
LocalTime t1 = LocalTime.parse(time1, fmt);
LocalTime t2 = LocalTime.parse(time2, fmt);
long minutes = ChronoUnit.MINUTES.between(t1, t2); //80

请注意,这并没有考虑任何DST变化。

以分钟为单位的结果只是以小时为单位乘以60的结果:

System.out.println("Minutes " + (diffInHours)*60 );
我不明白你在做什么计算。如果您想要剩下的时间,您应该删除小时数的整数部分:

System.out.println("Minutes " + (diffInHours - (int)diffInHours)*60 );

它将返回20(因此您有1小时20分钟)。

分钟的结果就是小时乘以60的结果:

System.out.println("Minutes " + (diffInHours)*60 );
我不明白你在做什么计算。如果您想要剩下的时间,您应该删除小时数的整数部分:

System.out.println("Minutes " + (diffInHours - (int)diffInHours)*60 );
它将返回20(因此您有1小时20分钟)。

by是正确的。计算分钟数的数学在问题代码中是不正确的

另一个错误:格式化模式字符串显然不正确。“AM”/“PM”表示
HH
应为
HH
(小写)。大写字母
HH
表示24小时时钟,而
HH
小写字母表示12小时半天时钟。此错误不会影响给定的示例输入,但对于下午/晚上的输入将失败

这个问题是另一个例子,说明为什么应该使用日期时间库而不是自己的

乔达时间 我不清楚问题是以分钟为单位的总运行时间[a]还是以小时和分钟为单位的总运行时间[b],其中分钟是小时的分数。下面的示例代码涵盖了这两种情况

该库提供了一个
Minutes
类,可以计算总运行分钟数

Joad Time还提供了三个类,用于以各种方式表示时间跨度:、和

表示沿时间线的一对点。周期将其转换为天数、小时等

默认情况下,类以标准指定的格式创建字符串表示:其中
p
标记开始,而
T
将日期部分与时间部分分开。因此,在我们的案例中,
PT1H20M
是一小时二十分钟

示例代码 从输入字符串开始

String inputStart = "05:00 AM";
String inputStop = "06:20 AM";
这些输入字符串只表示时间,没有任何日期或时区。让我们将它们解析为对象

Minutes
类和
Interval
/
Period
类都需要日期时间实例,而不仅仅是时间实例。让我们转换成a,任意选择今天作为日期部分。我们将其指定为时区,以避免出现异常或其他异常

DateTime start = startTime.toDateTimeToday ( DateTimeZone.UTC );  // Use UTC to avoid DST and other anomalies, as we want general elapsed time rather than on any specific day.
DateTime stop = stopTime.toDateTimeToday ( DateTimeZone.UTC );
现在我们有了一对对象,我们可以使用类的静态方法来计算总运行分钟数。
minutesBetween
方法返回一个对象,因此我们也调用
getMinutes
来获取一个
int
数字。给定示例输入,我们期望
80

int elapsedMinutes = Minutes.minutesBetween ( start, stop ).getMinutes ( );
为了得到小时和分钟,而不是总分钟,让我们定义一个时间跨度

Interval interval = new Interval ( start, stop );
Period period = interval.toPeriod ( );
转储到控制台

System.out.println ( "diff: " + diff );
System.out.println ( "diffInHours: " + diffInHours );
System.out.println ( "diffInMins " + diffInMins );
System.out.println ( "In UTC, from " + inputStart + " to " + inputStop + " is interval: " + interval + " and period: " + period + ", or " + period.getHours ( ) + " hours and " + period.getMinutes ( ) + " minutes. In total elapsed minutes: " + elapsedMinutes + "." );
跑步的时候

在UTC中,从05:00 AM到06:20 AM的时间间隔为:2015-05-15T05:00:00.000Z/2015-05-15T06:20:00.000Z,周期为:PT1H20M,或1小时20分钟。总运行分钟数:80。
by是正确的。计算分钟数的数学在问题代码中是不正确的

另一个错误:格式化模式字符串显然不正确。“AM”/“PM”表示
HH
应为
HH
(小写)。大写字母
HH
表示24小时时钟,而
HH
小写字母表示12小时半天时钟。此错误不会影响给定的示例输入,但对于下午/晚上的输入将失败

这个问题是另一个例子,说明为什么应该使用日期时间库而不是自己的

乔达时间 我不清楚问题是以分钟为单位的总运行时间[a]还是以小时和分钟为单位的总运行时间[b],其中分钟是小时的分数。下面的示例代码涵盖了这两种情况

该库提供了一个
Minutes
类,可以计算总运行分钟数

Joad Time还提供了三个类,用于以各种方式表示时间跨度:、和

表示沿时间线的一对点。周期将其转换为天数、小时等

默认情况下,类以标准指定的格式创建字符串表示:其中
p
标记开始,而
T
将日期部分与时间部分分开。因此,在我们的案例中,
PT1H20M
是一小时二十分钟

示例代码 从输入字符串开始

String inputStart = "05:00 AM";
String inputStop = "06:20 AM";
这些输入字符串只表示时间,没有任何日期或时区。让我们将它们解析为对象

Minutes
类和
Interval
/
Period
类都需要日期时间实例,而不仅仅是时间实例。那么让我们换个话题