11

我有一个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());

并且有一个 B 类有一个方法private void dialogDuration(String timeStamp)

方法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); 

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

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

提前非常感谢!

4

4 回答 4

13

也许是这样的:

SimpleDateFormat dateFormat = new SimpleDateFormat("ss S");
Date firstParsedDate = dateFormat.parse(a);
Date secondParsedDate = dateFormat.parse(b);
long diff = secondParsedDate.getTime() - firstParsedDate.getTime();
于 2013-02-11T11:17:30.343 回答
6

假设您的 ArrayList 中有 Timestamp 对象或 Date 对象,您可以这样做:

Timestamp a = timeSt.get(0);

Timestamp b = timeSt.get(timeSt.size()-1);

long diff = b.getTime() - a.getTime();
于 2013-02-11T10:48:54.033 回答
1

您可以使用以下两种方法计算差异(您也可以通过添加额外的 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”

于 2021-10-29T13:23:48.950 回答
-1

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

顺便说一句,你真的需要java.sql.TimeStamp吗?也许一个简单的DateCalendar更容易和更合适。

于 2013-02-11T10:20:41.857 回答