2013-12-09 29 views
1

我读过之前的文章,了解了以下内容,但仍然无法正常工作。谁能帮我?java耗尽时间不显示

long startTime = System.currentTimeMillis(); 
...... 
long endTime = System.currentTimeMillis(); 
long different = endTime - startTime; 

System.out.println("different : " + different); 

long s = (different/1000) % 60; 
long m = (different/(1000 * 60)) % 60; 
long h = (different/(1000 * 60 * 60)) % 24; 
System.out.println(String.format("%d:%02d:%02d", h,m,s)); 

为什么我的输出时间仍然是0:00:00?

[output] 
different : 473 
0:00:00 
+0

你会得到什么输出和你期望的输出? –

+1

小数点后显示符号。 (1000分之473)%60 = 0.473。所以0秒是合乎逻辑的。 –

+0

谢谢。我知道我的错误..我知道它不到1秒 – BeyondProgrammer

回答

3

因为473 ms < 1s,所以你得到0:00:00。

+0

+1正确和最快的答案 – HpTerm

1

您正在运行473毫秒。这是半秒钟。

然后,您将显示执行的小时分钟数和秒数,对于它们全部为0。

您的输出是正确的。

0

你现在得到的输出在逻辑上是正确的。如果你想用你的时间计算毫秒,那么你的打印语句也会显示毫秒。

System.out.println(String.format("%02d:%02d:%02d.%03d", h,m,s,mls)); 
0

TL;博士

Instant now = Instant.now(); 
String output = Duration.between(now , 
            now.plus(473 , ChronoUnit.MILLISECONDS)) 
         .toString(); 

PT0.473S

详细

正如其他说明,473毫秒是小于第二所以它显示为全零秒。

ISO 8601

不要使用时间 - 日期格式不曲目经过时间。它含糊不清,令人困惑。根据你的格式细节,会遇到这种分数问题。

相反,使用标准ISO 8601 format for a span of timePnYnMnDTnHnMnS其中P标志着开始和T从小时 - 分 - 秒分隔年,月,日。

您正在使用现在由java.time类取代的麻烦的旧日期时间类。

Instant

Instant类表示UTC时间轴与nanoseconds分辨率上一会儿。

Instant instant = Instant.now(); 

让我们在未来几分钟内模拟输入数据。

Instant future = instant.plus(473 , ChronoUnit.MILLISECONDS); 

Duration

Duration的类表示时间从时间线未连接的跨度。

Duration duration = Duration.between(instant , future); 

以ISO 8601格式生成字符串。

String output = duration.toString(); 

PT0.473S

内部跟踪为若干整秒加上一个分数第二为纳秒数。所以,把它当做:

持续时间=(秒+的Nano)

你可以要求全总秒数和分数秒为纳秒。

long seconds = duration.getSeconds(); 
int nanos = duration.getNano(); 

关于java.time

java.time框架是建立在Java 8和更高版本。这些课程取代了麻烦的旧日期时间课程,如java.util.Date,.Calendar,& java.text.SimpleDateFormat

Joda-Time项目现在位于maintenance mode,建议迁移到java.time。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。

大部分的java.time功能后移植到Java 6 和ThreeTenABP还适于Android(见How to use…)。

ThreeTen-Extra项目扩展java.time与其他类。这个项目是未来可能增加java.time的一个试验场。你可以在这里找到一些有用的类,如Interval,YearWeek,YearQuarter,等等。