【问题标题】:Java format milliseconds to uu:mm:ssJava 格式毫秒到 uu:mm:ss
【发布时间】:2011-06-20 04:10:03
【问题描述】:

我有以下问题,但我还没有找到最佳解决方案。 假设我有一个具有以下值的整数:

int miliseconds = 65111;

我想使用printf() 函数将其打印到流中。有没有办法可以做到以下几点:

printf("Time: %uu:mm:ssT", miliseconds");

所以它会返回:

Time: 00:01:05

这里我只是弥补了 %uu:mm:ssT 部分,但是有没有办法做到这一点。

另外,你知道我可以找到所有格式选项的网站吗,这样我下次可以自己查一下。

【问题讨论】:

  • 我会查看TimeUnit api,如here 所示。是的......一个无耻的自我推销,但它是相关的!恕我直言,这是一个更好的解决方案。

标签: java time format


【解决方案1】:

查看SimpleDateFormat 功能。

考虑以下示例

String inputPattern = .... 
String outputPattern = ....
String ms = ((Integer) milliseconds).toString();
DateFormat inFormat = new SimpleDateFormat(inputPattern);
DateFormat outFormat = new SimpleDateFormat(outputPattern);

// Parse input
Date date = inFormat.parse(ms);

// Format the output
String output = outFormat.format(date);

[编辑] - 更新示例以仅使用 j2se 而不是包括 yodatime。

【讨论】:

  • 是的,我见过那个。但是有没有办法我可以这样做,在 printf 部分有一个参数?
  • 有办法,看我的回答。但是,它不如使用 POSIX strftime 好。
  • 你的例子有点冗长。我认为不需要使用 SimpleDateFormat 以毫秒为单位进行解析。只要毫秒值低于一天的毫秒数,1970 年的 1 小时与 2011 年的 1 小时相同。只需使用 new Date(milliseconds);
  • @JavadocMD 有趣的建议,这对于这个特殊的应用程序很有效。
  • 感谢您的评论。使用新数据(毫秒)时我得到的唯一结果是它提前了一个小时,所以 30123 因为 01:00:30 而不是 00:00:30 知道为什么会这样吗?
【解决方案2】:

使用

final int miliseconds = 65111;
System.out.printf("%1$TM:%1$TS.%1$TL\n", (long) miliseconds);

详情请参阅Format String Syntax

【讨论】:

  • 这很好地回答了我的问题。但是,这是你会这样做的方式,还是你会按照 Johan 的方式来做。
  • 我会使用我的解决方案,但我同意与strftime("%M:%S.%L", miliseconds) 之类的东西相比,两者都很糟糕。在 Java 中,它可能看起来像 printf("%T(%M:%S.%L)"
【解决方案3】:

如果您使用 SimpleDateFormat 从新日期(毫秒)开始格式化时间,请不要忘记 SimpleDateFormat 对时区敏感。所以在使用前将其设置为 UTC,如下所示:

DateFormat outFormat = new SimpleDateFormat("HH:mm:ss");
outFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

Date d = new Date(milliseconds);
String result = outFormat.format(d);

(我在我的程序中使用类似的代码让 JSpinner 输入毫秒时间值。)

【讨论】:

    猜你喜欢
    • 2012-09-09
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多