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

时间:2018-04-17 19:08:30

标签: 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 weeks = (((timeToGrow/60)/60)/24)/7;

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

代码应该打印出2 Weeks 1 Days 15 Hours 39 Minutes 24 Seconds,但是在打印出2 Weeks 15 Days 375 Hours 39 Minutes 24 Seconds.时,我认为我看到了问题,但我不确定如何修复它。请原谅我可怜的措辞,但我认为小时部分包括时间和星期部分,不像时间分开,如分钟和秒(再次,对不起,我不知道如何说出来)。如何更改公式以正确显示正确的时间戳?非常感谢你!

2 个答案:

答案 0 :(得分:4)

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.");

答案 1 :(得分:4)

这取决于您使用的Java版本。

Java 8或更高版本

您可以使用Java Duration类:

 Duration duration = Duration.ofSeconds(1352364);

它的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或更高版本

如上所述使用Duration课程;但是对于较新版本的Java,此类具有适当剩余的方法,您可以按如下方式生成字符串:

System.out.println(
    duration.toDaysPart() + " days, " +
    duration.toHoursPart() + " hours, " +
    duration.toMinutesPart() + " minutes, " + 
    duration.toSecondsPart() + " seconds."
);

......但这没有几周。如果您想要周数,请计算日期,设置final int DAYS_IN_A_WEEK = 7,然后使用days / DAYS_IN_A_WEEKdays % DAYS_IN_A_WEEK

Java 7或更早版本

如果您正在使用早期版本的Java,请使用backport of the newer-Java-versions java.time classes(感谢@OleVV获取建议)或Joda Time classes - 这两个版本都有Durationthis answer中所述,Joda有一个PeriodFormatter类。

如果您使用的是Java 5或更早版本,只有Joda可以使用。