用Java计算时间,例如1900-1710=110分钟

用Java计算时间,例如1900-1710=110分钟,java,time,date-arithmetic,Java,Time,Date Arithmetic,java中有什么方法可以做到这一点吗?我想让它这样计算时间。0950-0900是50分钟,但1700-1610=50分钟而不是90分钟,1900-1710=110而不是190分钟。谢谢:)看一看(JavaSE8中引入的新功能的一部分) 例如(未经测试): 您可以使用Java8中新的JavaDateAPI LocalTime start = LocalTime.parse("19:00"); LocalTime end = LocalTime.parse("17:10"); Duration el

java中有什么方法可以做到这一点吗?我想让它这样计算时间。0950-0900是50分钟,但1700-1610=50分钟而不是90分钟,1900-1710=110而不是190分钟。谢谢:)

看一看(JavaSE8中引入的新功能的一部分)

例如(未经测试):


您可以使用Java8中新的JavaDateAPI

LocalTime start = LocalTime.parse("19:00");
LocalTime end = LocalTime.parse("17:10");
Duration elapsed = Duration.between(start, end);
System.out.println(elapsed.toMinutes());

如果您切换开始和结束,这将输出:-110和110。

如果您只得到整数,而不关心验证,则可以完全不接触时间部分:

public int getMinutesBetween(int time1, int time2) {
    // Extract hours and minutes from compound values, which are base-100,
    // effectively.
    int hours1 = time1 / 100;
    int hours2 = time2 / 100;
    int minutes1 = time1 % 100;
    int minutes2 = time2 % 100;
    // Now we can perform the arithmetic based on 60-minute hours as normal.
    return (hours2 - hours1) * 60 + (minutes2 - minutes1);
}

但是,我强烈建议您使用更合适的表示法-这些不仅仅是正常的
int
值。。。它们实际上是“一天中的时间”值,因此
LocalTime
(在Joda time或Java 8的
Java.time
)是最合适的表示形式,依我看。

什么是0010-0020?应该是2350吗?当然-我个人会用Joda时间-这是你的选择吗?另外,如果使用Java8,您可以使用基于Joda time的新日期和时间功能。@amit是的,但我现在不需要它,因为我只是想找到平均时间长度,我不会让它像那样返回。@Jon Skeet不,对不起,Joda time不是我的选择,我只是想找一个方法或一些数学计算,但我没有这样做,谢谢你的输入:)或者,相当于,
ChronoUnit.MINUTES.between(LocalTime.of(17,10),LocalTime.of(19,00))
为什么没有保存答案的选项?这一个非常简单。@Puce嘿,谢谢,但它说找不到符号变量Localime?@Puce您可能想补充一点,这需要java8@NandaArdianto:请看我的答案-但这样表示复合值太可怕了。如果1700是17:00,你不应该除以100吗?
public int getMinutesBetween(int time1, int time2) {
    // Extract hours and minutes from compound values, which are base-100,
    // effectively.
    int hours1 = time1 / 100;
    int hours2 = time2 / 100;
    int minutes1 = time1 % 100;
    int minutes2 = time2 % 100;
    // Now we can perform the arithmetic based on 60-minute hours as normal.
    return (hours2 - hours1) * 60 + (minutes2 - minutes1);
}