【发布时间】:2014-02-21 17:48:41
【问题描述】:
我正在尝试在没有默认字段名称的情况下消除常规的持续时间,即天、小时、分钟、秒等。
这个格式化的时间差被放在进度条的末尾,以便显示进程的实时运行时间。
public static String calculateTime(Date timeStart)
{
Date timeStop = new Date()
TimeDuration duration = TimeCategory.minus(timeStop, timeStart)
return "${duration.days}:${duration.hours}:${duration.minutes}:${duration.seconds}".toString()
//return duration.toString()
}
public static void printProgBar(long num, long den, Date startDate){
def bar = "[";
DecimalFormat df = new DecimalFormat("#.00");
def dataType = "";
def len = den.toString().length()
if(den == 0)
{
den = 1;
}
BigDecimal percent = ((num/den)*100)
if(len <= 3){ dataType = "bytes" }
if(len <= 6 && len > 3){ dataType = "Kbs" }
if(len <= 9 && len > 6){ dataType = "Mbs" }
if(len <= 12 && len > 9){ dataType = "Gbs" }
def n = num
def d = den
if(dataType.equals("Kbs"))
{
n = num/1024
d = den/1024
}
if(dataType.equals("Mbs"))
{
n = num/1024/1024
d = den/1024/1024
}
if(dataType.equals("Gbs"))
{
n = num/1024/1024/1024
d = den/1024/1024/1024
}
for(int i = 0; i < 50; i++){
if( i < (percent/2)){
bar += "|";
}else if( i == (percent/2)){
bar += ">";
}else{
bar += " ";
}
}
def message = (percent == 100) ? "Complete!" : "processed..."
bar += "] " + df.format(percent) + "% " + df.format(n) + " of " + df.format(d) + " $dataType $message " + HSTools.calculateTime(startDate);
print "\r" + bar;
}
输出:
加载数据:Patient_Contacts_Data.txt 创建扫描器并设置分隔符:\|^@*^@r^@*^@\| [||||||||||||||||||||||||||||||||||||||||||||||| |] 100.00% 1.60 of 1.60 Mbs 完成! 0:0:0:5656 处理的记录:5857 经过时间:0:0:0:56
在大多数情况下,我的代码似乎可以正常工作,但有时秒数似乎会增加一倍。
对可能导致这种情况的任何想法?或者关于如何更好地格式化这个 TimeDuration 的建议?
【问题讨论】:
-
什么是 HSTools?输出格式为
HSTools.calculateTime(startDate),这可能是您应该开始查找的地方。 -
HSTools.calculateTime() 是上面代码中列出的第一个函数。您可以看到那里的格式设置是 ${duration.days}:${duration.hours}:${duration.minutes}:${duration.seconds} 应该产生 0:0:0:0 的输出(天,小时,分钟,秒)
标签: datetime grails groovy timer duration