我正在尝试让我的应用程序在用户命令上打印其正常运行时间,但是在执行时会生成以下内容:
Current up-time: 01:00:07:34
实际正常运行时间为00:00:07:34
。我花了一些时间对此进行类似的问题,大多数人都说要么将时区设置为GMT,要么使用外部时间API。当我试图将依赖性保持在最低限度时,我试图避免使用外部API只是为了简单地获得正常运行时间。我将时区设置为GMT,但它只是修复了小时(它曾用01:01:07:34
作为正常运行时间。)
我的代码是这样的:
case "uptime":
long uptime = System.currentTimeMillis()-MainClass.getStartTime();
DateFormat formatter = new SimpleDateFormat("DD:HH:mm:ss");
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.printf("Current up-time: %s\n", formatter.format(new Date(uptime)));
return true;
任何人都知道如何才能让它产生合理的输出?
答案 0 :(得分:1)
Date(long time)
构造函数创建一个新对象,其中包含1970年1月1日00:00:00 GMT之后的日期 time 毫秒(请参阅JavaDoc)。您实际上想要格式化时间段,而不是日期。 JDK没有为此提供任何方法。您可以自己实现一个期间格式化程序,也可以使用像joda这样的库提供一个(joda:PeriodFormatter
,PeriodFormatterBuilder
)。
答案 1 :(得分:0)
D
是一年中的一天。使用d
表示某一天。
DateFormat formatter = new SimpleDateFormat("dd:HH:mm:ss");