2013-10-28 37 views
3

快速提問。將分鐘轉換爲人類可讀格式

是否有更智能/更時尚的方式將分鐘轉換爲更具可讀性的格式,只顯示最重要的數字?

我正在使用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; 
} 

非常感謝, Ĵ

+0

對於這種需求,我只想用一些'的if/else,如果/ else'語句。 –

+0

根據您需要多少粒度,使用條件語句會更有意義。 – dARKpRINCE

+0

也許這是一個很好的Lib:http://ocpsoft.org/prettytime/ –

回答

3

那麼這是可能的,我看着辦吧,我爲此而自豪! :) 請注意,只需通過更改這兩個數組中的值,您可以輕鬆添加任何其他值而不更改方法本身。例如,如果「年」對您而言不夠,您可以添加「幾十年」和「幾個世紀」......

此代碼還在最後添加了「s」字母,如果您有超過1個輸出值。

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 
+0

謝謝。我用這個稍作改動(現在你也改變了你的日期) int [] minBoundaries = {1,60,60 * 24,60 * 24 * 7,60 * 24 * 7 * 4 ,60 * 24 * 365}; String [] boundaryNames = {「min」,「hr」,「day」,「wk」,「mth」,「yr」}; – Jammo

+0

是的,我忘了添加「天」第一:) – libik

3

我會用一些虛擬if/else if/else聲明:

public static String convert(int minutes) { 
    if(minutes < 60) { 
    return String.format("%d mins", minutes); 
    } 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(84)); 

輸出:

1小時,24分鐘

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); 
} 
相關問題