【问题标题】:How to convert a time in seconds to a full timestamp?如何将时间以秒为单位转换为完整的时间戳?
【发布时间】:2018-04-17 19:08:30
【问题描述】:

我无法将时间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 8 的 time api 中检查 Duration 类。它为此提供了一些辅助方法。
  • 对于这个词的用法,这不是一个时间戳,它听起来更像是一个持续时间,一个时间量。 时间戳是标识事件发生时间的信息。

标签: java time formula


【解决方案1】:
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.");

【讨论】:

    【解决方案2】:

    这取决于您使用的 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 - 这两者都有一个 Duration 类,而 Joda 有一个 @987654343 @class,如this answer中所述。

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

    【讨论】:

    猜你喜欢
    • 2015-06-17
    • 2018-11-29
    • 2019-12-23
    • 1970-01-01
    • 2017-05-28
    • 2021-08-20
    • 1970-01-01
    • 2021-03-15
    • 1970-01-01
    相关资源
    最近更新 更多