我无法将时间
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.
我想我看到了问题,但我不知道如何解决它。请原谅我的措辞不佳,但我认为小时部分包括天和周部分中的时间,不像时间是分开的,比如分钟和秒(再次抱歉,我不知道如何措辞)。如何更改公式以正确显示正确的时间戳?非常感谢!
这取决于您使用的 Java 版本。
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
。
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,请使用较新 Java 版本的 backport
java.time
类(感谢 @OleVV 的建议),或 Joda Time 类 - 这两个类都有一个Duration
类,Joda 有一个 PeriodFormatter
类,如这个答案中所述。
如果您使用的是 Java 5 或更早版本,则只有 Joda 可以工作。
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.");