1

プロジェクトで Joda Time を使用したいと考えています。良い使い方があれば教えていただきたいです。まず第一に、初期化してから毎秒その値を計算するプログレスバーを作成したいのですが、プロセスを完了するまでの残り時間が表示されます。

初期化中、残り時間とパーセンテージを表す "HH:mm:ss" (場合によっては "D 日 HH:mm:ss") 形式の文字列のみがあります - プログレスバーの初期状態。それが私が持っているすべてです。

ここで、タスク完了の瞬間を表す DateTime オブジェクトを作成したいと考えています。

PeriodFormatter timeFormatter = new PeriodFormatterBuilder()
        .appendHours().appendSeparator(":").appendMinutes()
        .appendSeparator(":").appendSeconds().toFormatter();
DateTime endDate_ = new Date();
Period periodLeft = null;
String[] parsedInput = timeLeft.split(" ");
if (parsedInput != null) {
    switch (parsedInput.length) {
    case 1: {
        periodLeft = timeFormatter.parsePeriod(parsedInput[0]);
        endDate_.plus(periodLeft);
        break;
    }
    case 3: {
        periodLeft = timeFormatter.parsePeriod(parsedInput[2]);
        periodLeft.plusDays(Integer.parseInt(parsedInput[0]));
        endDate_.plus(periodLeft);
        break;
    }
    default:
        break;
    }
}

私が今理解している限り、私は私が欲しかったものを持っていますよね? ここで、プロセスの合計時間を計算したいと思います。そのため、この期間をミリ秒に変換し、進行状況に基づいて合計時間をカウントします。

long duration_ = (periodLeft.toStandardDuration().getMillis() * 100) / (progress == 0 ? 1 : progress);

ここで、現在の時刻に基づいてプロセスの実際の状態を返すメソッドを実装する必要があります。どうすればそれを達成できますか?期間がわかっているので、開始日時を取得できました。次に、現在の日付を開始日とカウント パーセンテージ (現在 - 開始)/期間_ * 100 と単純に比較できます。しかし、開始日を取得するにはどうすればよいでしょうか。

4

2 に答える 2

0

Jodatime は非常に使いやすく、必要なものを取得するためにコードをフォーマッターで埋める必要はありません。測定しているプロセスが何であれ、コードのある時点で開始されている必要があり、開始時刻に注意する必要があります。このようなことを試してください。

 DateTime startTime = DateTime.now();
 DateTime endTime = DateTime.now();
 endTime.plusSeconds(50);


 //Write code for your application.
 //....
 Thread.sleep(3000);

 //Calculate your percentage.
 double remainingPercentage =  (  DateTime.now().getMillis() - startTime.getMillis()) / ( endTime.getMillis() - DateTime.now().getMillis() )*100 ;

//Then output the date using the string method.
 endTime.toString("MMM dd yy ");
于 2013-06-22T22:40:23.333 に答える