なぜ日付変換は、異なるタイムスタンプを返すのですか?

wdmv1981:

私は、Unixタイムスタンプを取得するには日付をGregorianCalendarインスタンスに変換しています。

同じ日付が異なるUnixは毎回タイムスタンプを返します。しかし、なぜ、私は思っていました。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

Calendar calendar = new GregorianCalendar();
calendar.set(2018, 0, 1, 0,0,0);
System.out.println(sdf.format(calendar.getTime()));
Date date = calendar.getTime();

System.out.println(sdf.format(date));
System.out.println(date.getTime());

日付自体は、正しく、常に同じです"2018/01/01 00:00:00"しかし、なぜUNIXタイムスタンプが毎回違うのですか?例えば、これらは5つの実行後の値です。

1514761200624
1514761200618
1514761200797
1514761200209
1514761200132
achAmháin:

私はあなたの例では、ループ内のすべてのインスタンスを作成していると仮定していますか?

もしそうなら、あなたはそう、彼らは、ループの各反復で(ただしわずかに)変更するには、ミリ秒差を設定されていません。

これを回避するには、いずれかのミリ秒を設定し、またはループのインスタンス化の外側を行うことができます:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar calendar = new GregorianCalendar();
calendar.set(2018, 0, 1, 0, 0, 0);
for (int i = 0; i < 5; i++) {
     System.out.println(sdf.format(calendar.getTime()));
     Date date = calendar.getTime();
     System.out.println(sdf.format(date));
     System.out.println(date.getTime());
}

これは、生成されます。

2018年1月1日夜12時〇〇分00秒

2018年1月1日夜12時〇〇分00秒

1514764800128

2018年1月1日夜12時〇〇分00秒

2018年1月1日夜12時〇〇分00秒

1514764800128

2018年1月1日夜12時〇〇分00秒

2018年1月1日夜12時〇〇分00秒

1514764800128

2018年1月1日夜12時〇〇分00秒

2018年1月1日夜12時〇〇分00秒

1514764800128

2018年1月1日夜12時〇〇分00秒

2018年1月1日夜12時〇〇分00秒

1514764800128

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=315003&siteId=1