2015-07-02 121 views
3

我想創建一個庫,因爲我找不到一個將秒或毫秒轉換爲時間的庫。到時候我的意思是:Java以一種智能的方式將秒轉換爲時間

1)如果我有61秒時間格式爲:1:01(而不是1:1)

2)如果我有1小時1分鐘相當於我想它顯示相同的:

public String secondsToTime(int seconds){ 

    String format = ""; 
    int currentMinutes = 0, currentHour = 0; 

    if((seconds/60) > 0) { 
     currentMinutes = seconds/60; 
     seconds = seconds - currentMinutes * 60; 
    } 
    if(currentMinutes >= 60) 
    { 
     currentHour = currentMinutes/60; 
     currentMinutes = currentMinutes - currentHour * 60; 
    } 


    if(currentHour == 0) { 
     if(currentMinutes < 10 && seconds < 10) 
      format = "0"+currentMinutes+":0"+seconds; 
     else if(currentMinutes > 9 && seconds < 10) 
      format = currentMinutes+":0"+seconds; 
     else if(currentMinutes > 9 && seconds > 9) 
      format = currentMinutes+":"+seconds; 
     else if(currentMinutes < 10 && seconds > 9) 
      format = "0"+currentMinutes+":"+seconds; 
    } 
    else 
    { 
     Log.i("TEST", "Current hour este" + currentHour); 
     if(currentMinutes < 10 && seconds < 10) 
      format = currentHour+":0"+currentMinutes+":0"+seconds; 
     else if(currentMinutes > 9 && seconds < 10) 
      format = currentHour+":"+currentMinutes+":0"+seconds; 
     else if(currentMinutes > 9 && seconds > 9) 
      format = currentHour+":"+currentMinutes+":"+seconds; 
     else if(currentMinutes < 10 && seconds > 9) 
      format = currentHour+":0"+currentMinutes+":"+seconds; 
    } 

    return format; 
} 

是否有快速的方法來做到這一點:1點01分00秒

我通過使以下結構來實現這一點?

這個問題不重複,因爲如果你想顯示我想要的格式,java.util.concurrent.TimeUnit不符合標準。 我同意他爲你做了轉換,但是我仍然需要許多if語句來檢查每次是否有一個小時我只能顯示一個字符的分鐘數,而不顯示小時數,因爲與00小時無關。

我這樣做搜索和詢問這些問題,因爲我想用這個算法到媒體播放器上Android展現的歌曲總時間和歌曲的當前第二。

例如,我有一些小時以上的混音和幾分鐘的音樂,播放音樂文件時顯示00:02:30總時間無關緊要,正確的方法是:2:30因爲沒有小時(小時== 0),如果音樂文件有2分3秒,說2:3是不正確的,正確的方法是2:03。

+0

可能重複[如何將毫秒轉換爲「X分鐘,x秒」在Java?](http://stackoverflow.com/questions/62 5433/how-to-convert-milliseconds-to-x-mins -x-seconds-in-java) – sinclair

+0

我已經檢查瞭解決方案@sinclair,如果我將61分鐘轉換爲小時,然後花一分鐘我將有1小時1分鐘,我想要這種格式的東西:1:01而不強迫它,因爲你可以看到我有很多如果做這種格式。 –

回答

1

簡單地將其轉換爲字符串,並且只要切斷主角,因爲它是「0」或「:」

DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
String myDate = dateFormat.format(new Date(TimeUnit.SECONDS.toMillis(seconds))); 
while ((myDate.charAt(0).equals("0") || myDate.charAt(0).equals(":")){ 
    myDate = myDate.substring(1); 
} 
+0

這是我正在尋找的答案,我會用我的算法做一些測試,稍後我會發布結果。 –

7

這個怎麼樣,如果我理解正確的話:

final DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss"); 
    return dateFormat.format(new Date(TimeUnit.SECONDS.toMillis(seconds))); 
+0

我唯一的疑問是,如果我輸入110秒,我會得到1:50?有錯誤顯示01:50或00:01:50 –

3

如何:

/** 
* @author Alexey Belov 
*/ 
public class DateFormatTest { 

    private String format(int seconds) { 
     final DateFormat dateFormat; 
     if (seconds < 60) { 
      dateFormat = new SimpleDateFormat("ss"); 
     } else if (seconds < 60 * 60) { 
      dateFormat = new SimpleDateFormat("m:ss"); 
     } else { 
      dateFormat = new SimpleDateFormat("H:mm:ss"); 
     } 
     final Calendar gmt = Calendar.getInstance(Locale.ENGLISH); 
     gmt.set(1970, Calendar.JANUARY, 1, 0, 0, 0); 
     gmt.add(Calendar.SECOND, seconds); 
     return dateFormat.format(gmt.getTime()); 
    } 

    @Test 
    public void test10100() { 
     Assert.assertEquals("1:01:00", format(60 * 60 + 60)); 
    } 

    @Test 
    public void test101() { 
     Assert.assertEquals("1:01", format(61)); 
    } 

    @Test 
    public void test01() { 
     Assert.assertEquals("01", format(1)); 
    } 

    @Test 
    public void test120000() { 
     Assert.assertEquals("12:00:00", format(60 * 60 * 12)); 
    } 


}