2017-09-26 180 views
-2

當我使用簡單的日期格式解析某些日期(時間)時,下面的代碼給了我比預期時間多五個小時的時間。我正在解析毫秒到字符串。我正在解析一些媒體文件的持續時間。例如,當我的媒體文件實際上是10分鐘時,它會提供5小時10分鐘。問題是什麼?簡單的日期格式不能正確解析日期

public static String formatTime(String time) { 
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("H:mm:ss"); 
    Date date = new Date(Long.parseLong(time)); 
    return simpleDateFormat.format(date); 
+0

你可以添加'Time'輸入值的一些例子嗎? – Henrik

+0

添加一些時間參數,你傳遞的是什麼? –

+2

您正在使用java.util.Date對象來存儲時間(小時,分鐘,秒),但Date對象不適合僅存儲時間。 – Jesper

回答

1

您不應該用Date來代表持續時間。如果Time是媒體文件的持續時間(以毫秒爲單位),那麼Date date = new Date(Long.parseLong(Time));將構建一個日期,該日期在1970年1月1日00:00之後的許多毫秒,在您的情況下將是當天的00:10。

恐怕您必須手動將您的毫秒解析爲幾小時,幾分鐘和幾秒鐘,然後使用String.format("%d:%02d:%02d",hours,minutes,seconds)進行格式化。

+2

這是正確的答案。將一個持續時間解析爲一個「Date」在一個非常基礎的層面上是錯誤的。請查看['Duration'](https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html)課程。 – Henrik

+0

如何用手解析所有毫秒? –

+0

@AmeerHamza使用'Long.parseLong(time)'獲得'long'中的毫秒數,然後使用'%'運算符取其餘部分。此外,將像long一樣的整數類型值與另一個整數類型值相除總是舍入(即捨棄餘數)。 – Haem

-1

我用這種方式它的正常工作

public static String FormatTime(String Time) { 
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm:ss"); 
    Date d=new Date(Long.parseLong(Time)); 
    String formatted=simpleDateFormat.format(d); 
    if (Long.parseLong(Time) > 3600000&&Long.parseLong(Time)<7200000) { 
     formatted=String.format("%d %s",1,formatted); 
    } 
    else if (Long.parseLong(Time)>=7200000&&Long.parseLong(Time)<10800000){ 
     formatted=String.format("%d %s",2,formatted); 
    } 
    return formatted; 
}