2016-09-22 17 views
0

ここでは私のコードです:convertTimeがどのように見える

System.out.println(" serverStartTime:" + serverStartTime + " serverRunningTime:" + serverRunningTime); 

Timestamp sTime = convertTimeFormat(serverStartTime, "MMM d, yyyy H:mm:ss a z"); 
Timestamp eTime = convertTimeFormat(serverRunningTime, "MMM d, yyyy H:mm:ss a z"); 
long diff = (eTime.getTime() - sTime.getTime()); 
System.out.println("eTime.getTime():" + eTime.getTime() + " sTime.getTime():" + sTime.getTime() + " Time diff:" + diff); 

private Timestamp convertTimeFormat(String msgDate, String srcDateFormat) { 
    SimpleDateFormat sdf = new SimpleDateFormat(srcDateFormat); 
    SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    try { 
     Date d = sdf.parse(msgDate); 
     String formattedTime = output.format(d); 
     return Timestamp.valueOf(formattedTime); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 

出力は次のようになります。時間の値を実行すると小さいこと

serverStartTime:Sep 22, 2016 12:42:56 AM PDT serverRunningTime:Sep 22, 2016 1:33:42 AM PDT 
eTime.getTime():1474533222000 sTime.getTime():1474573376000 Time diff:-40154000 

予告開始時刻。どうして?

答えて

1

Hをあなたの時刻形式で使用しました。これは24時間ですので、あなたの「開始」時刻はあなたの終了時刻より10時間以上遅れて正午の直後です。はい、フォーマット文字列にも "AM"がありますが、あなたの使用のために無視されていると私は考えています。H代わりにhを使用してください。常に、フォーマット文字列を非常に慎重にチェックしてください。

この問題をワークアウトの別の方法は、あなたの yyyy-MM-dd HH:mm:ss形式の中間値を印刷したであろうことを
Timestamp sTime = convertTimeFormat(serverStartTime, "MMM d, yyyy h:mm:ss a z"); 
Timestamp eTime = convertTimeFormat(serverRunningTime, "MMM d, yyyy h:mm:ss a z"); 

注意。あなたはほぼ確実に問題となる、あなたの出力形式でタイムゾーンを設定していないとしてそれは、それはあなたが持っていると思いますどのような実際のかどうかは明らかではありません

2016-09-22 12:42:56 
2016-09-22 01:33:42 

:私はあなたのような何かを見ていると思います疑います自体。可能であれば余分な文字列の往復を避けます。