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

问题描述 投票:0回答:2

我无法将时间

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 time formula
2个回答
5
投票

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

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_WEEK
 days % DAYS_IN_A_WEEK

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 7 或更早版本

如果您使用的是早期版本的 Java,请使用较新 Java 版本的 backport

java.time
(感谢 @OleVV 的建议),或 Joda Time 类 - 这两个类都有一个
Duration
类,Joda 有一个
PeriodFormatter
类,如这个答案中所述。

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


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.");
© www.soinside.com 2019 - 2024. All rights reserved.