问题将秒转换为HH:MM:SS java

时间:2017-09-08 09:26:35

标签: java date datetime time long-integer

我有一个long变量,表示应用程序的停机时间,以秒为单位。我想将停机时间显示为HH:mm:ss

Long downTime = 755; 
Date newD = new Date(downTime * 1000);

将long变量传递给Date时,我将其乘以1000以获得毫秒值。 newD变量的计算结果为Thu Jan 01 01:12:35 GMT 1970

newD的值关闭1小时,755秒= 00:12:35

据我所知,秒* 1000 =毫秒将评估为正确的答案。作为I seen here

如果我使用持续时间,我们会得到正确答案。

Duration d = Duration.ofSeconds(downTime);
PT12M35S

但格式不是我想要的。

3 个答案:

答案 0 :(得分:3)

LocalTime.MIN

LocalTime.MIN.plusSeconds( 755L ) 

或者,

LocalTime.MIN.plus( 
    Duration.ofSeconds( 755L ) 
)

CAVEAT:这是一个黑客,我不推荐它。代表一个时间段作为一个时间是模糊和混乱。

默认情况下,LocalTime::toString方法省略了尾随单位(如果为零)。要强制所有三个部分(小时,分钟,秒),请使用DateTimeFormatter

DateTimeFormatter f = DateTimeFormatter.ofPattern( "HH:mm:ss" ) ;
String output = lt.format( f ) ;

请参阅此code run live at IdeOne.com

  

零时12分35秒

ISO 8601

如果可能,我建议您使用标准ISO 8601格式培训用户。这种格式实用,清晰,明确。默认情况下,java.time类中使用标准格式来解析/生成字符串。

  

PT12M35S

或者生成一个拼写出散文时间的字符串。

答案 1 :(得分:2)

检查您是否可以使用此功能:

long millis = 755000;
String hms = String.format("%02d:%02d:%02d", 
    TimeUnit.MILLISECONDS.toHours(millis),
    TimeUnit.MILLISECONDS.toMinutes(millis) % TimeUnit.HOURS.toMinutes(1),
    TimeUnit.MILLISECONDS.toSeconds(millis) % TimeUnit.MINUTES.toSeconds(1));
System.out.println(hms);

答案 2 :(得分:0)

你就快到了

java.time.DurationISO-8601 standards 为模型,并作为 JSR-310 implementation 的一部分与 Java-8 一起引入。 Java-9 引入了一些更方便的方法。

如果您浏览了以上链接,您可能已经注意到 PT12M35S 指定的持续时间为 12 分 35 秒。由于您已经获得了 Duration 对象,因此您可以从该对象中获取天数、小时数、分钟数、秒数,从而根据您的要求创建一个格式化的字符串。

演示:

import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        Long downTime = 755L;
        Duration duration = Duration.ofSeconds(downTime);// PT12M35S

        // Default format
        System.out.println(duration);

        // Custom format
        // ####################################Java-8####################################
        String formattedElapsedTime = String.format("%02d:%02d:%02d", duration.toHours() % 24,
                duration.toMinutes() % 60, duration.toSeconds() % 60);
        System.out.println(formattedElapsedTime);
        // ##############################################################################

        // ####################################Java-9####################################
        formattedElapsedTime = String.format("%02d:%02d:%02d", duration.toHoursPart(), duration.toMinutesPart(),
                duration.toSecondsPart());
        System.out.println(formattedElapsedTime);
        // ##############################################################################
    }
}

输出:

PT12M35S
00:12:35
00:12:35

Trail: Date Time 了解现代日期时间 API。

持续时间和日期是不同的概念

您的要求是计算持续时间而不是日期时间。 SimpleDateFormatjava.time.format.DateTimeFormatter(现代日期时间 API 的一部分)应该用于表示日期/时间/日期时间,即表示时间点而不是时间段/持续时间的东西.记住这一点的经验法则是:

  1. 在英语语法时态中使用 SimpleDateFormatjava.time.format.DateTimeFormatter 表示您用 since 指代的事物。
  2. Period and Duration 用于英语语法时态中用 for 指代的事物。

检查The Difference between Since and For – English grammar