java - 将秒转换为可读的时间字符串

标签 java

我需要获取一个代表秒的长值并将其作为可读字符串返回。我已经完成了这一点,但是我的问题是我需要它只返回所使用的单位。例如,如果我输入“1209600”秒,即14天,我需要它只返回“14天”,而不是“14天0小时0分0秒”。如果我输入“1209601”秒,即14天1秒,我需要它只返回“14天1秒”等。

除了多个 if 语句检查 0 值之外,最好的方法是什么?这是我到目前为止所拥有的:

public String getDurationString(long duration) {

    long days = TimeUnit.SECONDS.toDays(duration);
    duration -= TimeUnit.DAYS.toSeconds(days);

    long hours = TimeUnit.SECONDS.toHours(duration);
    duration -= TimeUnit.HOURS.toSeconds(hours);

    long minutes = TimeUnit.SECONDS.toMinutes(duration);
    duration -= TimeUnit.MINUTES.toSeconds(minutes);

    long seconds = TimeUnit.SECONDS.toSeconds(duration);

    return String.format("%d day(s) %d hr(s) %d min(s) %d sec(s)", days, hours, minutes, seconds);
}

最佳答案

作为建议,我将给出对每个时间单位使用 if 条件以及诸如字符串生成器之类的东西来创建最终消息。

示例:

public static void main(String[] args) {
    long duration = 1209622L;
    long days = TimeUnit.SECONDS.toDays(duration);
    duration -= TimeUnit.DAYS.toSeconds(days);

    long hours = TimeUnit.SECONDS.toHours(duration);
    duration -= TimeUnit.HOURS.toSeconds(hours);

    long minutes = TimeUnit.SECONDS.toMinutes(duration);
    duration -= TimeUnit.MINUTES.toSeconds(minutes);

    long seconds = TimeUnit.SECONDS.toSeconds(duration);
    
    StringBuilder msg = new StringBuilder( );
    if (days!=0) {
        msg.append( days+" day(s)");
    }
    if (hours!=0) {
        msg.append( hours+" hours(s)");
    }
    if (minutes!=0) {
        msg.append( minutes+" minutes(s)");
    }
    if (seconds!=0) {
        msg.append( seconds+" seconds(s)");
    }
    System.out.println(msg.toString());
}

关于java - 将秒转换为可读的时间字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36527567/

相关文章:

java - 在 Java 中打印左三角形 - 程序可以运行,但为什么呢?

java - 使用 Google Guice 注入(inject) java 属性

java - 使用 JNI 时 CryptUnprotectData 返回 false

java - Java中ArrayList中最大值的位置

java - 使用java自动打开Android设备的usb Debug模式

java - 将 Java 公历转换为字符串

java - 是否可以根据 X 值运行 methodnameX?

java - 尝试传递重载方法作为参数时无法解决方法错误

java - 为什么我使用 SSL 时收到 “Error commiting response java.io.IOException: Broken pipe at sun.nio.ch.FileDispatcher.write0(Native Method)”

java - 改造成功电话