Java 如何将以秒为单位的时间转换为完整的时间戳?

Java 如何将以秒为单位的时间转换为完整的时间戳?,java,time,formula,Java,Time,Formula,我无法将以秒为单位的时间1352364转换为以“周、天、小时、秒、分钟”为单位的时间戳格式。这是到目前为止我的代码 int timeToGrow = 1352364; int secs = timeToGrow % 60; int mins = (timeToGrow / 60) % 60; int hours = (timeToGrow / 60) / 60; int days = ((timeToGrow / 60) / 60) / 24; int w

我无法将以秒为单位的时间
1352364
转换为以“周、天、小时、秒、分钟”为单位的时间戳格式。这是到目前为止我的代码

int timeToGrow = 1352364;
    int secs = timeToGrow % 60;
    int mins = (timeToGrow / 60) % 60;
    int hours = (timeToGrow / 60) / 60;
    int days = ((timeToGrow / 60) / 60) / 24;
    int weeks = (((timeToGrow/60)/60)/24)/7;

    System.out.println(weeks + " Weeks "+ days + " Days " + hours + " Hours " + mins + " Minutes " + secs + " Seconds.");

代码应该打印出来
2周1天15小时39分24秒
,但是相反,在打印出来
2周15天375小时39分24秒。
我想我看到了问题,但我不确定如何解决它。请原谅我的措词不好,但我认为小时部分包括以天和周为单位的时间,而不是以分和秒为单位的时间(再次抱歉,我不知道如何用词)。如何更改公式以正确显示正确的时间戳?多谢各位

这取决于您使用的Java版本

int timeToGrow = 1352364;
int secs = timeToGrow % 60;
int mins = (timeToGrow / 60) % 60;
int hours = ((timeToGrow / 60) / 60) % 24;
int days = (((timeToGrow / 60) / 60) / 24) % 7;
int weeks = (((timeToGrow/60)/60)/24)/7;
System.out.println(weeks + " Weeks "+ days + " Days " + hours + " Hours " + mins + " Minutes " + secs + " Seconds.");
Java 8或更高版本 您可以使用Java类:

它的API提供了获取纳秒数、秒数、小时数、天数等的方法。例如:

 System.out.println(duration.toDays() + " days");
要获取余数,可以使用方法
.minusDays()
minusHours()
等等,或者执行以下操作:

 final int HOURS_IN_A_DAY = 24;
 System.out.println(duration.toHours() % HOURS_IN_A_DAY);
Java 9或更高版本 使用如上所述的类;但对于较新版本的Java,此类具有用于适当余数的方法,您可以按如下方式生成字符串:

System.out.println(
    duration.toDaysPart() + " days, " +
    duration.toHoursPart() + " hours, " +
    duration.toMinutesPart() + " minutes, " + 
    duration.toSecondsPart() + " seconds."
);
。。。但这是没有星期的。如果您想要周数,请获取天数,将
final int days\u IN_A_WEEK=7
,并使用
days/days\u IN_A_WEEK
days%days\u IN_A_WEEK

Java 7或更早版本 如果您使用的是早期版本的Java,请使用(感谢@OleVV的建议),或者-这两个版本都有
Duration
类,而Joda有
PeriodFormatter
类,如中所述


如果你使用java 5或更早的版本,只有JoDA会工作。

如果这不是一个任务,你应该考虑从java 8的时间API检查这个类。它有一些帮助方法。对于单词用法,这不是时间戳,它听起来更像是持续时间,一个时间量。时间戳是标识事件发生时间的信息。回答得好。对于Java6和Java7,我更喜欢
Java.time
的后端口,而不是Joda时间。对于Java 5,Joda Time是正确的选择。感谢您的回答,但是我不确定如何正确使用duration。@JBoonders关于如何使用
duration
,我认为答案给出了一个很好的演示。您也可以访问,尤其是。并在网上搜索。最后
System.out.println(
    duration.toDaysPart() + " days, " +
    duration.toHoursPart() + " hours, " +
    duration.toMinutesPart() + " minutes, " + 
    duration.toSecondsPart() + " seconds."
);