我到处寻找将秒转换成hh:mm:ss但找不到合适的
我创建了一个程序,允许用户输入两个不同的时间,然后计算差异
输入的时间分为hh * 3600 - mm * 60 - ss然后转换为秒并相互减去以秒计算差异
例如12:12:12和13:13:13会给我3661秒,但我不知道如何将差异转换回hh:mm:ss
任何帮助将不胜感激
答案 0 :(得分:7)
以防万一你想为此编写自己的算法:
假设我们有1000秒。
我们知道一小时内有3600秒,所以当我们将此时间格式化为hh:mm:ss时,hh字段将为00.现在假设我们的时间为3700秒。此时间间隔略大于1小时,因此我们知道hh字段将显示01。
因此,要计算hh字段的数量,只需将提供的秒数除以3600。
int hours = seconds / 3600
请注意,当我们的秒数量大于3600时,结果会被截断,因此我们会在几个小时内保留一个整数。
转到mm字段。再说一次,我们假设我们的时间间隔是3700秒。我们已经知道3700秒略超过1小时 - 我们已在hour
字段中存储了小时数。要计算分钟数,我们将从提供的秒输入中减去小时3600:
int minutes = (seconds - hours * 3600) / 60
因此,如果我们提供的时间为3700秒,则上述代码转换为(3700 - 3600)/ 60 - 我们除以60,因为我们希望将秒数转换为分钟数。
最后,ss字段。我们使用与上面类似的技术来计算秒数。
int seconds = (seconds - hours * 3600) - minutes * 60
public static String formatSeconds(int timeInSeconds)
{
int hours = timeInSeconds / 3600;
int secondsLeft = timeInSeconds - hours * 3600;
int minutes = secondsLeft / 60;
int seconds = secondsLeft - minutes * 60;
String formattedTime = "";
if (hours < 10)
formattedTime += "0";
formattedTime += hours + ":";
if (minutes < 10)
formattedTime += "0";
formattedTime += minutes + ":";
if (seconds < 10)
formattedTime += "0";
formattedTime += seconds ;
return formattedTime;
}
答案 1 :(得分:4)
使用旧的java date api(不推荐,请参阅注释):
int sec = .... //
Date d = new Date(sec * 1000L);
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss"); // HH for 0-23
df.setTimeZone(TimeZone.getTimeZone("GMT"));
String time = df.format(d);
注意:根据评论,如果秒数超过一天中的秒数(86400),那么它将无法按预期工作。在这种情况下,必须采取不同的方法。
编辑:如果您正在使用JDK 8,可以写信:
int sec = ...
Duration duration = Duration.ofSeconds(sec);
此持续时间对象更能代表您正在谈论的内容。我试图找出如何格式化它,但到目前为止我没有运气。
编辑2 :在JDK 8之前,您可以使用Joda API:
int sec = ...
Period period = new Period(sec * 1000L);
String time = PeriodFormat.getDefault().print(period); // you can customize the format if this one doesn't cut it
这可能是最优雅的解决方案。另请参阅this。
编辑3 :根据评论,我明确添加了时区。
答案 2 :(得分:2)
public static void formatSeconds(Integer result){
System.out.print(String.format("%02d",result/3600)+":");
System.out.print(String.format("%02d",result/60%60)+":");
System.out.println(String.format("%02d",result%60));
}
答案 3 :(得分:1)
这是一种较短的方法:
public static String formatSeconds(int timeInSeconds){
int secondsLeft = timeInSeconds % 3600 % 60;
int minutes = Math.floor(timeInSeconds % 3600 / 60);
int hours = Math.floor(timeInSeconds / 3600);
string HH = hours < 10 ? "0" + hours : hours;
string MM = minutes < 10 ? "0" + minutes : minutes;
string SS = secondsLeft < 10 ? "0" + secondsLeft : secondsLeft;
return HH + ":" + MM + ":" + SS;
}
答案 4 :(得分:0)
使用JODA时间库http://joda-time.sourceforge.net/apidocs/index.html
PeriodFormatter formatter = ... // Define your formatting here
Period firstPeriod = new Period(13, 13, 13, 0);
Period secondPeriod = new Period(12, 12, 12, 0);
Period resultPeriod = firstPeriod.minus(secondPeriod);
String formattedPeriod = formatter.print(resultPeriod);
// Display period e.g. System.out.println(formatterPeriod);
// ....
答案 5 :(得分:0)
我知道现在回答这个问题有点晚了,但没关系。 它与 BarBar1234 的答案基本相同,但您可以将其全部组合成一个字符串:
String.format("%02d:%02d:%02d", seconds / 3600, (seconds / 60) % 60, seconds % 60);