我想在我的项目中使用Joda Time。我很想知道我是否知道如何使用它。 首先 - 我想创建一个我初始化的进度条,然后每秒计算它的值 - 它显示了完成过程所需的时间。
在初始化期间,我只有格式为“HH:mm:ss”的字符串(偶尔表示“D days 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);
现在我必须实现一个基于当前时间返回实际进程状态的方法。我怎样才能做到这一点?我知道持续时间,所以我可以得到DateTime的开始。然后我可以简单地将当前日期与开始日期和计数百分比进行比较:(现在 - 开始)/ duration_ * 100.但是如何才能获得开始日期?
答案 0 :(得分: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 ");
答案 1 :(得分:0)
确定。我设法解决了!计算进度的函数现在稍微修改为:
if (progress == 0)
duration_ = periodLeft.toStandardDuration().getMillis();
else
duration_ = (long) ((periodLeft.toStandardDuration().getMillis() * 100) / (double) (100 - progress));
我接下来要做的是将我的progressBar最大值设置为duration_,并将进度的每秒设置值显示为:
new Period(startDate_, DateTime.now())