【问题标题】:Looking for Java formatted time utils寻找 Java 格式的时间工具
【发布时间】:2024-01-19 09:42:01
【问题描述】:

我正在寻找 java 的时间工具,我可以在其中给出以秒或 milis 为单位的时间,它会返回诸如 getSecondsgetMinutes 之类的方法,因此我可以轻松地将文本格式化为看起来像Remaining 1 day 2 hours 3 minutes and 4 seconds。 有谁知道吗?

【问题讨论】:

  • 你做过研究吗?
  • 也许java.time.Duration
  • 如果你只需要最多天(即,不是几个月),那么这只需要几个部门,不需要图书馆
  • How to format a duration in java? (e.g format H:MM:SS) 的可能重复项(您可以从那里轻松调整答案以给您1 day 2 hours 3 minutes and 4 seconds)。

标签: java time formatting timestamp


【解决方案1】:

一分钟有60秒,一小时有60分钟,一天有24小时,所以:

private static final int SECONDS_IN_MINUTE = 60;
private static final int SECONDS_IN_HOUR = 60 * SECONDS_IN_MINUTE;
private static final int SECONDS_IN_DAY = 24 * SECONDS_IN_HOUR;

那么你只需要继续划分:

class RemainingTime {
    private static final int SECONDS_IN_MINUTE = 60;
    private static final int SECONDS_IN_HOUR = 60 * SECONDS_IN_MINUTE;
    private static final int SECONDS_IN_DAY = 24 * SECONDS_IN_HOUR;

    private int totalSeconds, days, hours, minutes, seconds;

    public RemainingTime(int totalSeconds) {
        this.totalSeconds = totalSeconds;
        init();
    }

    private void init() {
        int remainingSeconds = totalSeconds;
        days = remainingSeconds / SECONDS_IN_DAY;

        remainingSeconds -= days * SECONDS_IN_DAY;
        hours = remainingSeconds / SECONDS_IN_HOUR;

        remainingSeconds -= hours * SECONDS_IN_HOUR;
        minutes = remainingSeconds / SECONDS_IN_MINUTE;

        remainingSeconds -= minutes * SECONDS_IN_MINUTE;
        seconds = remainingSeconds;
    }

    public int getDays() { return days; }
    public int getHours() { return hours; }
    public int getMinutes() { return minutes; }
    public int getSeconds() { return seconds; }
}

你可以这样使用它:

RemainingTime rt = new RemainingTime(274119);

System.out.println(String.format(
        "Remaining %s day(s), %s hour(s), %s minute(s) and %s second(s)",
        rt.getDays(), rt.getHours(), rt.getMinutes(), rt.getSeconds()));

输出:

Remaining 3 day(s), 4 hour(s), 8 minute(s) and 39 second(s)

【讨论】: