Why can't I get a duration in minutes or hours in java.time?

后端 未结 6 2138
故里飘歌
故里飘歌 2020-11-29 02:22

Of the Duration class in the new JSR 310 date API (java.time package) available in Java 8 and later, the javadoc says :

This class models a quantity o

6条回答
  •  夕颜
    夕颜 (楼主)
    2020-11-29 03:22

    By below code i got this duration output:

    1 day, 2 hours, 5 minutes

    code example:

    private String getDurationAsString(Duration duration)
    {
        StringBuilder durationAsStringBuilder = new StringBuilder();
        if (duration.toDays() > 0)
        {
            String postfix = duration.toDays() == 1 ? "" : "s";
            durationAsStringBuilder.append(duration.toDays() + " day");
            durationAsStringBuilder.append(postfix);
        }
    
        duration = duration.minusDays(duration.toDays());
        long hours = duration.toHours();
        if (hours > 0)
        {
            String prefix = Utils.isEmpty(durationAsStringBuilder.toString()) ? "" : ", ";
            String postfix = hours == 1 ? "" : "s";
            durationAsStringBuilder.append(prefix);
            durationAsStringBuilder.append(hours + " hour");
            durationAsStringBuilder.append(postfix);
        }
    
        duration = duration.minusHours(duration.toHours());
        long minutes = duration.toMinutes();
        if (minutes > 0)
        {
            String prefix = Utils.isEmpty(durationAsStringBuilder.toString()) ? "" : ", ";
            String postfix = minutes == 1 ? "" : "s";
            durationAsStringBuilder.append(prefix);
            durationAsStringBuilder.append(minutes + " minute");
            durationAsStringBuilder.append(postfix);
        }
    
        return durationAsStringBuilder.toString();
    }
    

    Explanation:

    By using Duration interface you can easily find the exact String display you want. you just need to reduce the bigger TemporalUnit from current duration.

    for example:

    1. calculate days
    2. reduce days from duration
    3. calculate hours
    4. reduce hours from duration etc... until u get duration = 0

提交回复
热议问题