【问题标题】:Convert minutes into a human readable format将分钟转换为人类可读的格式
【发布时间】:2013-10-28 13:51:43
【问题描述】:

快速提问。

是否有更智能/更时尚的方式将分钟转换为更易读的格式,只显示最重要的数字?

我正在使用 Android Studio 的 Java。

public String MinutesToHumanReadable(Long minutes) {

...

}

2 mins = "2 mins"
45 mins = "45 mins"
60 mins = ">1 hr"
85 mins = ">1 hr"
120 mins = ">2 hrs"
200 mins = ">3 hrs"
1500 mins = ">1 day"

我的代码非常繁琐、草率,而且有些不可读。

public String MinutesToHumanReadable(long minutes) {
    String sReturn = "";

    if (minutes > 515600) {
        sReturn = "> 1 yr";

    } else if (minutes > 43200) {
        sReturn = (minutes / 43200) + " mths";

    } else if (minutes > 10080) {
        sReturn = (minutes / 10080) + " wks";

    } else if (minutes > 1440) {
        sReturn = (minutes / 1440) + " days";

    } else if (minutes > 60) {
        sReturn = (minutes / 60) + " hrs";

    } else {
        //<60
        sReturn = minutes + " mins";

    }

    return sReturn;
}

非常感谢, J

【问题讨论】:

  • 为了这个需要,我会使用一些if/else if/else 语句。
  • 根据您需要多少粒度,使用条件语句最有意义。
  • 也许是一个不错的库:ocpsoft.org/prettytime
  • android.text.format.DateUtils 带有各种相对时间格式化助手,例如getRelativeTimeSpanString()。该实现在结构上与您的并没有太大不同:github.com/android/platform_frameworks_base/blob/master/core/…
  • 解决了,如果你之前看过答案,我的代码有一点错误,所以“刷新”它并享受:)

标签: java android date formatting android-studio


【解决方案1】:

这是可能的,我想通了,我为此感到自豪! :) 请注意,您可以轻松地添加任何其他值而无需更改方法本身,只需更改这两个数组中的值即可。例如,如果“年”对您来说不够用,您可以添加“十年”和“世纪”...

如果您有超过 1 个输出值,此代码还会在末尾添加“s”字母。

public class SuperMinutesChangerClass {
    public static int[] barriers = {1, 60, 60*24, 60*24*7, 60*24*365, Integer.MAX_VALUE};
    public static String[] text = {"min", "hr", "day", "week", "year"};

    public static String minutesToHumanReadable(int minutes){
        String toReturn = "";
        for (int i = 1; i < barriers.length; i++) {
            if (minutes < barriers[i]){
                int ammount = (minutes/barriers[i-1]);
                toReturn = ">" + (ammount) + " " + text[i-1];
                if (ammount > 1){
                    toReturn += "s";
                }
                break;
            }
        }
        return toReturn;
    }         
}

示例输入:

    public static void main(String[] args) {
        System.out.println(minutesToHumanReadable(10));
        System.out.println(minutesToHumanReadable(60));
        System.out.println(minutesToHumanReadable(61));
        System.out.println(minutesToHumanReadable(121));
        System.out.println(minutesToHumanReadable(8887));
        System.out.println(minutesToHumanReadable(9999743));
    }  

输出是:

>10 mins
>1 hr
>1 hr
>2 hrs
>6 days
>19 years

【讨论】:

  • 谢谢。我用这个做了一点改变(现在你也改变了你的包括'day') int[] minBoundaries = {1, 60, 60*24, 60*24*7, 60*24*7*4, 60 *24*365}; String[] boundaryNames = {"min", "hr", "day", "wk", "mth", "yr"};
  • 是的,我忘了先添加“天”:)
【解决方案2】:

我会使用一些虚拟的if/else if/else 语句:

public static String convert(int minutes) {
  if(minutes < 60) {
    return String.format("%d mins", minutes);
  } else if(minutes % 60 == 0) { // No minutes - i.e. not a fractional hour.
    return String.format("%d hrs", minutes/60);
  } else if(minutes < 1440) { //1 day = 1440 minutes
    return String.format("%d hrs, %d mins", minutes/60, minutes%60);
  } else {
    return String.format("%d days", minutes / 1440);
  }
}

样本输出

System.out.println(convert(24));   //=> 24 mins
System.out.println(convert(120));  //=> 2 hrs
System.out.println(convert(84));   //=> 1 hrs, 24 mins
System.out.println(convert(2880)); //=> 2 days

【讨论】:

  • 这很好。干净简单。
  • 我用一个额外的条件修改了这个,即minutes%60 == 0,而不是显示“0分钟”,它只显示小时,比如“3小时”。对于那些每小时的持续时间来说,清洁得多。
  • 你能更新答案@JoshuaPinter
  • @Sniffer 更新,包括更好的样本输出!新年快乐!
  • @JoshuaPinter 谢谢伙计。效果很好,新年快乐 :)
【解决方案3】:

也许这对你有帮助

private static final int MINUTES_PER_HOUR = 60;
private static final int MINUTES_PER_DAY = MINUTES_PER_HOUR * 24;

public String minutesToHumanReadable(long minutes) {
    if (minutes > MINUTES_PER_DAY) {
        return String.format("> %d days", minutes / MINUTES_PER_DAY);
    } else if (minutes > MINUTES_PER_HOUR) {
        return String.format("> %d hours", minutes / MINUTES_PER_HOUR);
    }

    return String.format("%d minutes", minutes);
}

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 2021-06-21
    • 2010-12-11
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多