2

我有一个搜索按钮,当用户单击搜索按钮时,会调用 search() 方法。正如我们在谷歌搜索中看到的那样,我需要计算向用户显示结果所花费的时间。

这是我的代码。

        SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate;
def startTime() { 
    Calendar cal = Calendar.getInstance();
    System.out.println("Current milliseconds since 13 Oct, 2008 are :"
    + cal.getTimeInMillis());
    long startTime=cal.getTimeInMillis();
    /*Date startNow = new Date();
    strDate = sdfDate.format(startNow);
    Date startTime=sdfDate.parse(strDate);
    print "startTime"+startTime*/
    return  startTime;

}
def endTime(){
    Calendar cal = Calendar.getInstance();
    System.out.println("Current milliseconds  :"
    + cal.getTimeInMillis());
    long endTime=cal.getTimeInMillis();
    /*Date endNow = new Date();
    print "endNow"+endNow
    strDate = sdfDate.format(endNow);
    Date endTime=sdfDate.parse(strDate);
    print "endTime"+endTime*/
    return endTime;
}

def differenceTime(long startTime,long endTime){
    print "requestEndTime"+endTime
    print "requestStartTime"+startTime
    long timeDifference = endTime - startTime;
    return timeDifference;
}

在这里,我试图获取开始时间和结束时间并尝试计算差异。我知道我实施的方式是否正确?请告诉我通常如何计算时差。

4

4 回答 4

5

而不是使用Calendar它更容易使用System.currentTimeMillis()

def startTime() { 
    long startTime=System.currentTimeMillis();
    return  startTime;
}

基于 System.currentTimeMillis() 计算时差在 Java 中很常见,你会做对的(我的意思是endTime - startTime

因此,您的代码可能如下所示:

long startTime = System.currentTimeMillis();
// .....
// processing request
// .....
long endTime = System.currentTimeMillis();
long differenceTime = endTime - startTime;
log.debug("Request time: " + differenceTime);
//or
log.debug("Request time: " + TimeUnit.MILLISECONDS.toSeconds(differenceTime) + " sec");
于 2013-01-24T05:32:12.700 回答
0

您可以改用此类。我在学习 Coursera 的算法,第一部分课程时学到了它。

public class StopWatch {

    /* Private Instance Variables */
    /** Stores the start time when an object of the StopWatch class is initialized. */
    private long startTime;

    /**
     * Custom constructor which initializes the {@link #startTime} parameter.
     */
    public StopWatch() {
        startTime = System.currentTimeMillis();
    }

    /**
     * Gets the elapsed time (in seconds) since the time the object of StopWatch was initialized.
     * 
     * @return Elapsed time in seconds.
     */
    public double getElapsedTime() {
        long endTime = System.currentTimeMillis();
        return (double) (endTime - startTime) / (1000);
    }
}

测试可以如下进行:

public class SWTest {

    public static void main(String[] args) throws InterruptedException {
        StopWatch stopWatch = new StopWatch();

        Thread.sleep(10000);
        System.out.println(stopWatch.getElapsedTime());
        Thread.sleep(60000);
        System.out.println(stopWatch.getElapsedTime());
    }
}
于 2013-01-24T05:52:13.153 回答
0

你可以这样编码:

LocalDateTime startTIme = LocalDateTime.now();
//Code Here
LocalDateTime endTime = LocalDateTime.now();
System.out.println(Duration.between(startTIme,endTime));
于 2016-05-04T06:58:14.157 回答
0

java.time

避免使用旧的 java.util.Date/.Calendar 类。在证明设计不佳和麻烦之后,旧的日期时间类已被java.time框架取代。请参阅教程。查看添加到旧类的新方法以进行转换。

JSR 310定义。大部分 java.time 功能已向后移植到 Java 6 和 7,并进一步适应 Android

Instant

AnInstant代表UTC时间轴上的一个时刻,分辨率高达纳秒

由于依赖于旧的预先存在的实现,因此捕获当前时刻仅限于毫秒级Clock分辨率;在 Java 9 中替换为以纳秒为单位捕获当前时刻(取决于您计算机的硬件时钟能力)。

Instant start = Instant.now();
…
Instant stop = Instant.now();

Duration

该类Duration将时间跨度表示为总秒数加上以纳秒为单位的几分之一秒。

Duration duration = Duration.between( start , stop );

输出

Duration::toString方法使用标准 ISO 8601 格式生成文本表示。以 a 开头P(用于句点),aT将年-月-日与小时-分钟-秒分开。所以一个半小时就可以了PT1H30M。这种格式避免了01:30含义经过时间与一天中的时间的歧义。

String output = duration.toString();

或者,您可以询问总秒数和总纳秒数。

long seconds = duration.getSeconds();  // Whole seconds.
int nanoseconds = duration.getNano();  // Fraction of a second, maximum of 999,999,999. 
于 2016-05-06T19:31:10.707 回答