【问题标题】:Java application uptime not displayed as desiredJava 应用程序正常运行时间未按预期显示
【发布时间】:2013-11-12 18:48:42
【问题描述】:

我正在尝试让我的应用程序在用户命令上打印其正常运行时间,但是它在执行时会产生以下内容: Current up-time: 01:00:07:34 而实际正常运行时间是00:00:07:34。我花了一段时间来解决与此类似的问题,大多数人都说将时区设置为 GMT 或使用外部时间 API。当我试图将依赖关系保持在最低限度时,我试图避免使用外部 API 只是为了获得正常运行时间。我将时区设置为格林威治标准时间,但它所做的只是修正小时(它曾经将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;

任何人都知道我怎样才能得到这个以产生合理的输出?

【问题讨论】:

  • 您不是在格式化日期(时间点),而是时间间隔。我会自己计算。

标签: java time date-format


【解决方案1】:

Date(long time) 构造函数创建一个新对象,其中包含 1970 年 1 月 1 日 00:00:00 GMT 之后的时间 毫秒日期(请参阅JavaDoc)。您实际上想要格式化时间段,而不是日期。 JDK 没有为此提供任何方法。要么你自己实现一个周期格式化器,要么你使用像 joda 这样的库来提供一个(joda:PeriodFormatterPeriodFormatterBuilder)。

【讨论】:

    【解决方案2】:

    D 是一年中的某一天。使用 d 表示月份中的某天。

      DateFormat formatter = new SimpleDateFormat("dd:HH:mm:ss");
    

    【讨论】:

      猜你喜欢
      • 2018-03-10
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多