我无法在几秒钟内将时间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.
时,我认为我看到了问题,但我不确定如何修复它。请原谅我可怜的措辞,但我认为小时部分包括时间和星期部分,不像时间分开,如分钟和秒(再次,对不起,我不知道如何说出来)。如何更改公式以正确显示正确的时间戳?非常感谢你!
答案 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 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);
如上所述使用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_WEEK
和days % DAYS_IN_A_WEEK
。
如果您正在使用早期版本的Java,请使用backport of the newer-Java-versions java.time
classes(感谢@OleVV获取建议)或Joda Time classes - 这两个版本都有Duration
如this answer中所述,Joda有一个PeriodFormatter
类。
如果您使用的是Java 5或更早版本,只有Joda可以使用。