2016-07-04 5 views
0

指定された文字列を解析してタイムスタンプにするのに問題があります。 ミリ秒が間違って解析されるか、何か不足している場合はお知らせください。Java:文字列からタイムスタンプに変換するときにミリ秒が間違って解析される

私のようにリクエストから文字列を取得:

String selectedTimeStamp = request.getParameter("selectTime"); 
System.out.println("selectedTimeStamp: "+selectedTimeStamp); 

、その後、私は文字列を解析してフォーマットするのSimpleDateFormatを使用します。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US); 
Date parsedDate = sdf.parse(selectedTimeStamp); 
Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());  
System.out.println("createdTime: " +timestamp); 

私が手出力は次のようになります。

selectedTimeStamp: 2016-07-04 21:09:47.66 
createdTime: 2016-07-04 21:09:47.066 

なぜミリ秒が66から066に変換されるのか分かりませんか?それは660 任意のアイデアをする必要がありますか?

+2

「SSS」はミリ秒を意味するため、「66」は66ミリ秒として解析されます。 – Andreas

+0

新しいJava 8の時間APIは、 'SSS'を秒数として解釈するので、' SSS'ではなく 'SS'を指定したパターンであれば' .66'入力をうまく処理できます。 – Andreas

答えて

0

私はこれらはあなたが作った輸入されていると仮定しています

String selectedTimeStamp = "2016-07-04 21:09:47.6"; 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US); 
Date parsedDate = sdf.parse(selectedTimeStamp); 

System.out.println("parsedDate: " + parsedDate); 

Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime()); 
System.out.println("createdTime: " +timestamp); 

(効果的に)ステップ・バイ・ステップ

あなたのコードを、それを打破するのをしてみましょう:

import java.sql.Timestamp; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Locale; 

出力そのうち

parsedDate:Mon Jul 0 4午後九時09分47秒IST 2016

createdTime:2016年7月4日21:09:47.006

私は、引数として6ミリ秒を経過していてもそう、これはほとんどの場合、600ミリ秒に解析されましたおそらく我々が使用しているという事実のために、日付を解析するためのJavaライブラリと、それをタイムスタンプするためのSQLライブラリです。日付オブジェクトを処理するプロセスは、両方の言語で異なるため、矛盾します。また、ミリ秒は1000番目の精度(1000ms = 1s)で処理されるため、SQLは自動的に格納されたJava 6を006(または66〜066)に自動的に変換します。

selectedTimeStampselectedTimeStamp.length() - selectedTimeStamp.lastIndexOf('.')でチェックし、残りのゼロを連結することです。つまり、2の場合は2、3の場合は0、4の場合はゼロとなります。

これにより、正しい結果が得られます。ライン

int x = selectedTimeStamp.length() - selectedTimeStamp.lastIndexOf('.'); 

if (x==2) 
    selectedTimeStamp += "00"; 
if (x==3) 
    selectedTimeStamp += '0'; 

乾杯!!!

は、文字列selectesTimeStamp = "::09 47.6 2016年7月4日21" の後にこれを追加します。

P .: SSSをSSに変更することはできません。

+0

この回避策は機能します。 –

+0

私は助けになることができてうれしいです。しかし、私はそれを行う別の、より効率的な方法でなければならないと確信しています、私は1つを見つけたら投稿を更新するか、他の誰かが編集を提案してください。 – hackrush

関連する問題