5

快速提问。

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

我正在使用 Android Studio 的 Java。

public String MinutesToHumanReadable(Long minutes) {

...

}

IE

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

4

3 回答 3

4

Well it is possible, I figure it out and I am proud of it! :) Note that you can easily add any other value without changing the method itself, only by changing values in these two arrays. For example, if "years" are not enough for you, you can add "decades" and "centuries"...

This code also adding "s" letter at the end, if you have more than 1 of output value.

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;
    }         
}

Sample input :

    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));
    }  

Output is :

>10 mins
>1 hr
>1 hr
>2 hrs
>6 days
>19 years
于 2013-10-28T14:11:58.203 回答
4

我会使用一些虚拟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
于 2013-10-28T13:59:33.883 回答
1

也许这对你有帮助

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);
}
于 2013-10-28T14:02:47.960 回答