我有一个搜索按钮,当用户点击搜索按钮时,会调用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;
}
这里我试图获取开始时间和结束时间并尝试计算差异。我知道我实施的方式是否正确?请告诉我通常如何计算时差。
答案 0 :(得分: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");
答案 1 :(得分: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());
}
}
答案 2 :(得分:0)
你可以这样编码:
LocalDateTime startTIme = LocalDateTime.now();
//Code Here
LocalDateTime endTime = LocalDateTime.now();
System.out.println(Duration.between(startTIme,endTime));
答案 3 :(得分:0)
避免旧的旧java.util.Date/.Calendar类。在证明设计不佳和麻烦之后,旧的日期时间类已被java.time框架取代。见Tutorial。查看添加到旧类进行转换的新方法。
由JSR 310定义。 java.time的大部分功能都是back-ported to Java 6 & 7和further adapted to Android。
Instant
Instant
代表UTC中时间轴上的一个时刻,分辨率最高为nanoseconds。
由于依赖于milliseconds旧的预先存在的实施,捕获当前时刻仅限于Clock
分辨率;在Java 9中替换为以纳秒为单位捕获当前时刻(取决于计算机的硬件时钟能力)。
Instant start = Instant.now();
…
Instant stop = Instant.now();
Duration
Duration
类表示一个时间跨度,以秒为单位加上几分之一秒(纳秒)。
Duration duration = Duration.between( start , stop );
Duration::toString
方法使用标准ISO 8601格式生成文本表示。从P
开始(对于期间),T
将小时 - 月 - 天与小时 - 分 - 秒分开。所以一个半小时是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.