如何在java中找到两个时间戳的差异



我有一个包含多个时间戳的ArrayList,目的是找出ArrayList的第一个元素和最后一个元素的差异。

String a = ArrayList.get(0);
String b = ArrayList.get(ArrayList.size()-1);
long diff = b.getTime() - a.getTime();

我还将类型转换为int,但它仍然会给我一个错误The method getTime is undefined for the type String

附加信息:

我有一个a级,包括

String timeStamp = new SimpleDateFormat("ss S").format(new Date());

并且存在具有方法private void dialogDuration(String timeStamp) 的类B

dialogueDuration方法包括:

String a = timeSt.get(0); // timeSt  is an ArrayList which includes all the timeStamps
String b = timeSt.get(timeSt.size()-1);   // This method aims finding the difference of the first and the last elements(timestamps) of the ArrayList  (in seconds)
long i = Long.parseLong(a);
long j = Long.parseLong(b);
long diff = j.getTime()- i.getTime();
System.out.println("a: " +i); 
System.out.println("b: " +j); 

一个条件是语句(String timeStamp = new SimpleDateFormat("ss S").format(new Date());)不会在类A中更改。在类A创建了一个类B的对象,以便它调用dialogueDuration(timeStamp)方法并将时间戳的值传递给类B。

我的问题是这个减法不起作用,它给出了一个错误cannot invoke getTime() method on the primitive type long。对于int和String类型,它也会给出相同类型的错误?

提前感谢!

可能是这样的:

SimpleDateFormat dateFormat = new SimpleDateFormat("ss S");
Date firstParsedDate = dateFormat.parse(a);
Date secondParsedDate = dateFormat.parse(b);
long diff = secondParsedDate.getTime() - firstParsedDate.getTime();

假设您的ArrayList中有时间戳对象或日期对象,您可以执行以下操作:

Timestamp a = timeSt.get(0);
Timestamp b = timeSt.get(timeSt.size()-1);
long diff = b.getTime() - a.getTime();

您可以使用以下两种方法计算差异(也可以通过添加额外的if语句或使用switch case将上述方法修改为返回差异为"毫秒"、"天"、"月"等):

private Long calculateDifference(String date1, String date2, String value) {
        Timestamp date_1 = stringToTimestamp(date1);
        Timestamp date_2 = stringToTimestamp(date2);
        long milliseconds = date_1.getTime() - date_2.getTime();
        if (value.equals("second"))
            return milliseconds / 1000;
        if (value.equals("minute"))
            return milliseconds / 1000 / 60;
        if (value.equals("hours"))
            return milliseconds / 1000 / 3600;
        else
            return new Long(999999999);
    }
private Timestamp stringToTimestamp(String date) {
        try {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date parsedDate = dateFormat.parse(date);
            return new Timestamp(parsedDate.getTime());
        } catch (Exception e) {
            return null;
        }
    }

例如:

calculateDifference("2021-10-20 10:00:01", "2021-10-20 10:15:01", "minute");

将返回"-15"

calculateDifference("2021-10-20 12:00:01", "2021-10-20 10:15:01", "minute");

将返回"105"

您应该将ArrayList x设置为ArrayList<TimeStamp> x。随后,方法get(int)将返回TimeStamp类型的对象(而不是String类型)。在TimeStamp上,您可以调用getTime()

顺便问一下,你真的需要java.sql.TimeStamp吗?也许一个简单的CCD_ 17或CCD_。

相关内容

  • 没有找到相关文章

最新更新