我有一个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
但格式不是我想要的。
答案 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格式培训用户。这种格式实用,清晰,明确。默认情况下,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.Duration
以 ISO-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。
您的要求是计算持续时间而不是日期时间。 SimpleDateFormat
或 java.time.format.DateTimeFormatter
(现代日期时间 API 的一部分)应该用于表示日期/时间/日期时间,即表示时间点而不是时间段/持续时间的东西.记住这一点的经验法则是:
SimpleDateFormat
或 java.time.format.DateTimeFormatter
表示您用 since
指代的事物。for
指代的事物。