2017-09-26 13 views
-2

単純な日付形式を使用して日付を解析すると、予想される時間より5時間遅くなります。私は文字列にミリ秒を解析しています。私はいくつかのメディアファイルの期間を解析しています。たとえば、メディアファイルが実際に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

を働いているこの方法を使うのか? – 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

これは正解です。期間を「日付」に構文解析することは、非常に基本的なレベルでは間違っています。代わりに['Duration'](https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html)クラスを調べてください。 – Henrik

+0

どのように手ですべてのミリ秒を解析できますか? –

+0

@AmeerHamzaは 'long.parseLong(time)'を使用して 'long'でミリ秒を取得し、'% '演算子を使用して残りの部分を取ります。また、「long」のような整数型の値を別の整数型の値で除算すると、常に切り捨てられます(つまり、剰余が破棄されます)。 – Haem

-1

私はそれはあなたが `Time`のための入力値の例をいくつか追加することができます罰金

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; 
} 
関連する問題