如何在java中获取时差

如何在java中获取时差,java,Java,我需要在我的程序中获得时差。 例如:如果用户将较早的时间插入为08:30,将较晚的时间插入为5:00,我需要将时间间隔计算为8小时30分钟(我希望它显示为08小时30分钟) 我使用的是phpmyadmin,我的db有employee表,其中有三列,分别是earlierTime、laterTime和noOfHoursWorked,所有这些列的数据类型都是varchar(50),所以我这样做了,但输出不正确 public String timeDifference(String earlierTi

我需要在我的程序中获得时差。 例如:如果用户将较早的时间插入为08:30,将较晚的时间插入为5:00,我需要将时间间隔计算为8小时30分钟(我希望它显示为08小时30分钟)

我使用的是phpmyadmin,我的db有employee表,其中有三列,分别是earlierTime、laterTime和noOfHoursWorked,所有这些列的数据类型都是varchar(50),所以我这样做了,但输出不正确

public String timeDifference(String  earlierTime, String laterTime) {
    SimpleDateFormat format = new SimpleDateFormat("HH:mm");
    Date date1 = format.parse(startTime);
    Date date2 = format.parse(leavedTime);
    long difference = date2.getTime() - date1.getTime();
    String d = String.valueOf(difference);
    return d;
}
有谁能告诉我这里出了什么问题吗?我已经为这个问题挣扎了好几个小时了 如果我将earlierTime、laterTime更改为date、Noof Hoursworked更改为int,那么我知道在我的输出中无法将“8小时30分钟”更改为输出,因此我希望将其视为“08:30”

看看这个:

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDifferentExample {

 public static void main(String[] args) {

    String dateStart = "01/14/2012 09:29:58";
    String dateStop = "01/15/2012 10:31:48";

    //HH converts hour in 24 hours format (0-23), day calculation
    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

    Date d1 = null;
    Date d2 = null;

    try {
        d1 = format.parse(dateStart);
        d2 = format.parse(dateStop);

        //in milliseconds
        long diff = d2.getTime() - d1.getTime();

        long diffSeconds = diff / 1000 % 60;
        long diffMinutes = diff / (60 * 1000) % 60;
        long diffHours = diff / (60 * 60 * 1000) % 24;
        long diffDays = diff / (24 * 60 * 60 * 1000);

        System.out.print(diffDays + " days, ");
        System.out.print(diffHours + " hours, ");
        System.out.print(diffMinutes + " minutes, ");
        System.out.print(diffSeconds + " seconds.");

    } catch (Exception e) {
        e.printStackTrace();
    }

}
}看看这个:

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDifferentExample {

 public static void main(String[] args) {

    String dateStart = "01/14/2012 09:29:58";
    String dateStop = "01/15/2012 10:31:48";

    //HH converts hour in 24 hours format (0-23), day calculation
    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

    Date d1 = null;
    Date d2 = null;

    try {
        d1 = format.parse(dateStart);
        d2 = format.parse(dateStop);

        //in milliseconds
        long diff = d2.getTime() - d1.getTime();

        long diffSeconds = diff / 1000 % 60;
        long diffMinutes = diff / (60 * 1000) % 60;
        long diffHours = diff / (60 * 60 * 1000) % 24;
        long diffDays = diff / (24 * 60 * 60 * 1000);

        System.out.print(diffDays + " days, ");
        System.out.print(diffHours + " hours, ");
        System.out.print(diffMinutes + " minutes, ");
        System.out.print(diffSeconds + " seconds.");

    } catch (Exception e) {
        e.printStackTrace();
    }

}
}看看这个:

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDifferentExample {

 public static void main(String[] args) {

    String dateStart = "01/14/2012 09:29:58";
    String dateStop = "01/15/2012 10:31:48";

    //HH converts hour in 24 hours format (0-23), day calculation
    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

    Date d1 = null;
    Date d2 = null;

    try {
        d1 = format.parse(dateStart);
        d2 = format.parse(dateStop);

        //in milliseconds
        long diff = d2.getTime() - d1.getTime();

        long diffSeconds = diff / 1000 % 60;
        long diffMinutes = diff / (60 * 1000) % 60;
        long diffHours = diff / (60 * 60 * 1000) % 24;
        long diffDays = diff / (24 * 60 * 60 * 1000);

        System.out.print(diffDays + " days, ");
        System.out.print(diffHours + " hours, ");
        System.out.print(diffMinutes + " minutes, ");
        System.out.print(diffSeconds + " seconds.");

    } catch (Exception e) {
        e.printStackTrace();
    }

}
}看看这个:

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDifferentExample {

 public static void main(String[] args) {

    String dateStart = "01/14/2012 09:29:58";
    String dateStop = "01/15/2012 10:31:48";

    //HH converts hour in 24 hours format (0-23), day calculation
    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

    Date d1 = null;
    Date d2 = null;

    try {
        d1 = format.parse(dateStart);
        d2 = format.parse(dateStop);

        //in milliseconds
        long diff = d2.getTime() - d1.getTime();

        long diffSeconds = diff / 1000 % 60;
        long diffMinutes = diff / (60 * 1000) % 60;
        long diffHours = diff / (60 * 60 * 1000) % 24;
        long diffDays = diff / (24 * 60 * 60 * 1000);

        System.out.print(diffDays + " days, ");
        System.out.print(diffHours + " hours, ");
        System.out.print(diffMinutes + " minutes, ");
        System.out.print(diffSeconds + " seconds.");

    } catch (Exception e) {
        e.printStackTrace();
    }

}
}

java.time 在Java8及更高版本中,使用。()

乔达时间 在旧版Java中,如果您可以轻松添加外部库,请使用。这是最好的解决方案,因为许多人的变通方法在计算日期差异时不考虑闰年。

java.time 在Java8及更高版本中,使用。()

乔达时间 在旧版Java中,如果您可以轻松添加外部库,请使用。这是最好的解决方案,因为许多人的变通方法在计算日期差异时不考虑闰年。

java.time 在Java8及更高版本中,使用。()

乔达时间 在旧版Java中,如果您可以轻松添加外部库,请使用。这是最好的解决方案,因为许多人的变通方法在计算日期差异时不考虑闰年。

java.time 在Java8及更高版本中,使用。()

乔达时间

在旧版Java中,如果您可以轻松添加外部库,请使用。这是最好的解决方案,因为许多人的变通方法在计算日期差异时不考虑闰年。

使用Java 8的时间API或Joda Time,例如提供实际和预期的结果
earlierTime、laterTime和noOfHoursWorked。。。所有这些列的数据类型都是varchar(50)
为什么?您应该将日期和时间存储为日期和时间,而不是字符串。目前,您得到的差异以毫秒为单位,并将其转换为字符串。显然,这不是“08小时30分钟”的形式。你试过如何把毫秒转换成小时和分钟数吗?忽略要开始的字符串部分。我同意Takendarkk的观点-在这里使用字符串字段似乎不是一个好主意。Joda-Time可以帮助您:这里有一个类似的SO问题:使用Java 8的Time API或Joda-Time,例如提供实际和预期的结果
earlierTime、laterTime和noOfHoursWorked。。。所有这些列的数据类型都是varchar(50)
为什么?您应该将日期和时间存储为日期和时间,而不是字符串。目前,您得到的差异以毫秒为单位,并将其转换为字符串。显然,这不是“08小时30分钟”的形式。你试过如何把毫秒转换成小时和分钟数吗?忽略要开始的字符串部分。我同意Takendarkk的观点-在这里使用字符串字段似乎不是一个好主意。Joda-Time可以帮助您:这里有一个类似的SO问题:使用Java 8的Time API或Joda-Time,例如提供实际和预期的结果
earlierTime、laterTime和noOfHoursWorked。。。所有这些列的数据类型都是varchar(50)
为什么?您应该将日期和时间存储为日期和时间,而不是字符串。目前,您得到的差异以毫秒为单位,并将其转换为字符串。显然,这不是“08小时30分钟”的形式。你试过如何把毫秒转换成小时和分钟数吗?忽略要开始的字符串部分。我同意Takendarkk的观点-在这里使用字符串字段似乎不是一个好主意。Joda-Time可以帮助您:这里有一个类似的SO问题:使用Java 8的Time API或Joda-Time,例如提供实际和预期的结果
earlierTime、laterTime和noOfHoursWorked。。。所有这些列的数据类型都是varchar(50)
为什么?您应该将日期和时间存储为日期和时间,而不是字符串。目前,您得到的差异以毫秒为单位,并将其转换为字符串。显然,这不是“08小时30分钟”的形式。你试过如何把毫秒转换成小时和分钟数吗?忽略要开始的字符串部分。我同意Takendarkk——在这里使用字符串字段似乎是个坏主意。Joda-Time可以帮助您:这里有一个类似的SO问题:从这里我得到了预期的输出,但我不明白为什么要使用(模数符号%)long diffMinutes=diff/(60*1000)%60;长diffHours=diff/(60*60*1000)%24;diff以毫秒为单位,因此我们使用diff/(60*1000)将毫秒转换为分钟,但是使用%60的目的是什么?如果您将其更改为long diffSeconds=diff/1000,是否有人可以解释一下;结果将是1天1小时1分90110秒。“90110”是date1和date2之间的总秒数差异,如果您只想知道秒数差异,这是正确的。要以“天、小时、分钟和秒”格式显示差异,应使用模数(%60)来截断剩余的秒数(90060)。知道了?这一想法在几分钟(%60)和几小时(%24)内得到应用。90110%60=50秒(你想要这个)90110-50=90060秒(你不想要这个)@Fellimohamedhed我随时可以查询。从中我得到了预期的输出,但我不明白你为什么要使用(模数符号%)long diffMinutes=diff/(60*1000)%60;长diffHours=diff/(60*60*1000)%24;diff以毫秒为单位,因此我们使用diff/(60*1000)将毫秒转换为mi