2013-10-28 3 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; 
} 

많은 감사, J

+0

, 나는 그냥 '경우 다른/IF/else' 문을 사용합니다. –

+0

필요한 세분화 정도에 따라 조건문을 사용하는 것이 가장 적합합니다. – dARKpRINCE

+0

그럴만한 멋진 라이브러리가 있습니다. http://ocpsoft.org/prettytime/ –

답변

3

글쎄 그것은 가능을하는 데 도움이, 나는 그것을 파악하고 나는 그것을 자랑스러워! :) 메서드 자체를 변경하지 않고도이 두 배열의 값을 변경해야만 다른 값을 쉽게 추가 할 수 있습니다. 예를 들어, "년"으로 충분하지 않은 경우 "수십 년"과 "세기"를 추가 할 수 있습니다 ...

출력이 두 개 이상인 경우이 코드에는 끝에 "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 
+0

감사. 나는 이것을 약간 변경하여 사용했다. (이제는 '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"}; – 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); 
} 
관련 문제