0

私のプログラムでは、タイム スタンプをミリ秒単位で定義する文字列を受け取ります。これを適切な日付に変換する必要があります。私が見つけた解決策は次のようになります。

String aTime = "1365504203.0269";
double t = Double.parseDouble(aTime);

Date date = new Date((long)t*1000);
SimpleDateFormat dateFormatDDMMYYYY = new SimpleDateFormat("dd.MM.yyyy");
SimpleDateFormat dateFormatHHMMssSS = new SimpleDateFormat("HH:mm:ss:SS");
String day = new String(dateFormatHHMMssSS.format(date));
String hour = new String(dateFormatDDMMYYYY.format(date));

System.out.println("The Date: "+day);
System.out.println("The Time: "+hour);

残念ながら、これによりタイムスタンプからミリ秒の精度が失われます。(もうほとんど考えられないので、時間がそれほど正確かどうかはわかりません。)

double->long 変換で失われたのか、それともまったく存在しなかったのか? この問題を回避する方法はありますか?

4

1 に答える 1

3

問題は次のステートメントにあります。

Date date = new Date((long)t*1000);

最初に を longにキャストしdoubleて小数点以下を切り捨て、次に 1000 を掛けて 3 つのゼロを追加します。これを試して:

Date date = new Date((long)(t*1000.0));

double小数点以下を整数部に移動し、小数点以下切り捨てlong変換を行う乗算のデータ型として使用します。

1000.0as 定数の代わりに使用する1000と、定数も強制的にdouble型になり、乗算が double で発生するという確実性がさらに高まります。

于 2013-04-27T18:26:58.993 に答える