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

次のようにコーディングできます。

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

代わりにこのクラスを使用できます。Coursera のアルゴリズム、パート I の授業を進めながら学びました。

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

java.time

古いレガシー java.util.Date/.Calendar クラスは避けてください。設計が不十分で厄介であることが判明した後、古い日時クラスはjava.timeフレームワークに取って代わられました。チュートリアルを参照してください。変換のために古いクラスに追加された新しいメソッドを参照してください。

JSR 310で定義されています。java.time 機能の多くはJava 6 および 7 にバックポートされさらに Android に適合されています

Instant

Anは、最大ナノ秒の分解能でUTCInstantのタイムライン上の瞬間を表します。

の古い既存の実装に依存しているため、現在の瞬間のキャプチャはミリ秒単位Clockの解像度に制限されています。現在の瞬間をナノ秒単位でキャプチャするために Java 9 で置き換えられました (コンピューターのハードウェア クロック機能によって異なります)。

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

Duration

このDurationクラスは、合計秒数に 1 秒の端数 (ナノ秒) を加えた時間の範囲を表します。

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

出力

このDuration::toStringメソッドは、標準の ISO 8601 形式を使用してテキスト表現を生成します。Pa (期間) で始まり、aTは年-月-日と時-分-秒を区切ります。したがって、1 時間半は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 に答える