7

なぜ次のことが起こるのか理解できません:

String date = "06-04-2007 07:05";
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm");
Date myDate = fmt.parse(date); 

System.out.println(myDate);  //Mon Jun 04 07:05:00 EDT 2007
long timestamp = myDate.getTime();
System.out.println(timestamp); //1180955100000 -- where are the milliseconds?

// on the other hand...

myDate = new Date();
System.out.println(myDate);  //Tue Sep 16 13:02:44 EDT 2008
timestamp = myDate.getTime();
System.out.println(timestamp); //1221584564703 -- why, oh, why?
4

9 に答える 9

21

何ミリ秒?最初の例では分の情報のみを提供していますが、2 番目の例ではシステムから現在の日付をミリ秒単位で取得していますが、何を探しているのでしょうか?

String date = "06-04-2007 07:05:00.999";
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss.S");
Date myDate = fmt.parse(date);

System.out.println(myDate); 
long timestamp = myDate.getTime();
System.out.println(timestamp);
于 2008-09-16T17:11:48.527 に答える
2

指定した単純な日付形式ではミリ秒が破棄されるためです。したがって、結果の Date オブジェクトにはその情報がありません。したがって、印刷すると、すべて0になります。

一方、Date オブジェクトにミリ秒単位の値を代入すると (この場合は new Date() を使用)、ミリ秒が保持されます。したがって、それらを印刷すると、ミリ秒も含まれます。

于 2008-09-16T17:14:18.833 に答える
2

Sun JDK の Time/Date ライブラリを使用する代わりに (これには多くの要望が残されています)、http://joda-time.sourceforge.netを参照することをお勧めします。

これは非常に成熟したアクティブな sourceforge プロジェクトであり、非常に洗練された API を備えています。

于 2008-09-17T01:34:36.603 に答える
0

日付を解析すると、提供した情報のみが使用されます。この場合、MM-dd-yyyy HH:mm のみを認識します。

新しい日付オブジェクトを作成すると、現在のシステム日付/時刻 (エポックからのミリ秒数) が返されます。

于 2008-09-16T17:14:21.970 に答える
0

Date オブジェクトの toString() はミリ秒を表示しません...しかし、それらはそこにあります

したがって、 new Date() は、次のようにミリ秒単位の解像度を持つオブジェクトです。

  System.out.printf( "ms = %d\n", myDate.getTime() % 1000 ) ;

ただし、SimpleDateFormat で日付を作成すると、ミリ秒は渡されません。

ここで質問がありませんか?

[編集] ハハハ...遅すぎる;)

于 2008-09-16T17:15:22.357 に答える
0

getTime()メソッドはDate、1970 年 1 月 1 日からのミリ秒数を返します (すべてのコンピューターの日付はこの日付に基づいているため、この日付は「エポック」と呼ばれます)。人間が読めるバージョンの日付を表示するために使用しないでください。

SimpleDateFormat.format()代わりにメソッドを使用してください。これは、問題を解決できると思われるコードの一部の改訂版です。

String date = "06-04-2007 07:05:23:123";
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss:S");
Date myDate = fmt.parse(date); 

System.out.println(myDate);  //Mon Jun 04 07:05:23 EDT 2007
String formattedDate = fmt.format(myDate);
System.out.println(formattedDate); //06-04-2007 07:05:23:123
于 2008-09-16T19:27:49.933 に答える
0
import java.util.*;

public class Time {
    public static void main(String[] args) {
        Long l = 0L;
        Calendar c = Calendar.getInstance();
        //milli sec part of current time
        l = c.getTimeInMillis() % 1000;  
        //current time without millisec
        StringBuffer sb = new StringBuffer(c.getTime().toString());
        //millisec in string
        String s = ":" + l.toString();
        //insert at right place
        sb.insert(19, s);
        //ENJOY
        System.out.println(sb);
    }
}
于 2009-03-15T03:24:06.550 に答える
0

Date.getTime は、Date オブジェクトで表される 1970 年 1 月 1 日 00:00:00 GMT からのミリ秒数を返します。したがって、"06-04-2007 07:05" - "01-01-1970 00:00" は 1180955340000 ミリ秒に相当します。あなたの質問の唯一の懸念は日付の時間部分に関するものであるため、この計算の大まかな考え方は、07:05 から 00:00 までのミリ秒数、つまり 25500000 です。任意のミリ秒があります。

2 番目の日付では、そのコード行が実行される現在の時刻が使用されます。これは、現在の秒を過ぎた現在のミリ秒が計算に使用されます。したがって、Date.getTime は、1000 で割り切れない数値を返す可能性が高くなります。

于 2008-09-16T18:01:45.460 に答える