我在将以秒为单位的时间转换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.");
Run Code Online (Sandbox Code Playgroud)
代码应该打印出来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."
);
Run Code Online (Sandbox Code Playgroud)
...但这没有几周的时间。如果您需要几周,请获取天数,设置final int DAYS_IN_A_WEEK = 7,然后使用days / DAYS_IN_A_WEEK和 days % DAYS_IN_A_WEEK。
您可以使用 JavaDuration类:
Duration duration = Duration.ofSeconds(1352364);
Run Code Online (Sandbox Code Playgroud)
它的 API 具有获取纳秒数、秒数、小时数、天数等的方法。例如:
System.out.println(duration.toDays() + " days");
Run Code Online (Sandbox Code Playgroud)
要获得余数,您可以使用方法 等,或者执行类似以下操作.minusDays():minusHours()
final int HOURS_IN_A_DAY = 24;
System.out.println(duration.toHours() % HOURS_IN_A_DAY);
Run Code Online (Sandbox Code Playgroud)
如果您使用的是早期版本的 Java,请使用较新 Java 版本java.time类的向后移植(感谢 @OleVV 的建议),或Joda Time 类- 这两个类都有一个Duration类,并且 Joda 有一个PeriodFormatter类,正如这个答案中所描述的。
如果您使用的是 Java 5 或更早版本,则只有 Joda 可以工作。
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |