8

Java アプリケーションでは、UUIDバージョン 1から UNIX 時刻を取得しようとしています。しかし、それは正しい日時の値を与えていません。

long time = uuid.timestamp();
time = time / 10000L;   // Dividing by 10^4 as it's in 100 nanoseconds precision 
Calendar c = Calendar.getInstance();
c.setTimeInMillis(time);
c.getTime();

誰か助けてくれませんか?

4

4 に答える 4

16

のドキュメントからtimestamp()

結果のタイムスタンプは、UTC 1582 年 10 月 15 日の午前 0 時から 100 ナノ秒単位で測定されます。

したがって、そこから相殺する必要があります。例えば:

Calendar uuidEpoch = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
uuidEpoch.clear();
uuidEpoch.set(1582, 9, 15, 0, 0, 0); // 9 = October
long epochMillis = uuidEpoch.getTime().getTime();

long time = (uuid.timestamp() / 10000L) + epochMillis;
// Rest of code as before
于 2012-10-25T14:27:02.830 に答える
6

datastax ドライバーを使用している場合は、次のようになります。

UUIDs.unixTimestamp(uuid)

http://www.datastax.com/drivers/java/2.0/com/datastax/driver/core/utils/UUIDs.html#unixTimestamp(java.util.UUID)

于 2014-05-27T18:56:07.993 に答える