Wie extrahiere ich ein Datum aus einer UUID, die mit Java?
Wie konvertiert man die UUID
zu Datum-format 2011-04-22
?
Zum Beispiel, ich habe die UUID wie diese
118ffe80-466b-11e1-b5a5-5732cf729524.
Wie zu konvertieren, das Datum-format?
Versuchte ich
String uuid="118ffe80-466b-11e1-b5a5-5732cf729524";
UUID uid = UUID.fromString(uuid);
long ls=convertTime(uid.timeStamp()); //it returns long value
public String convertTime(long time){
System.out.println("====="+time);
Date date = new Date(time);
Format format = new SimpleDateFormat("yyyy/MM/dd");
return format.format(date).toString();
}
Ausgabe, die ich bekam:4294744/11/02
Gleichen Fall arbeiten gut für perl
$uuid='ef802820-46b3-11e2-bf3a-47ef6b3e28e2';
$uuid =~ s/-//g;
my $timelow = hex substr( $uuid, 2 * 0, 2 * 4 );
my $timemid = hex substr( $uuid, 2 * 4, 2 * 2 );
my $version = hex substr( $uuid, 2 * 6, 1 );
my $timehi = hex substr( $uuid, 2 * 6 + 1, 2 * 2 - 1 );
my $time = ( $timehi * ( 2**16 ) + $timemid ) * ( 2**32 ) + $timelow;
my $epoc = int( $time / 10000000 ) - 12219292800;
my $nano = $time - int( $time / 10000000 ) * 10000000;
#$time_date = scalar localtime $epoc;
#print strftime( '%d-%m-%Y %H:%M:%S', localtime($epoc) );
#print "\n Time: ", scalar localtime $epoc, " +", $nano / 10000, "ms\n";
bitte überprüfen Sie daher mit dieser url stackoverflow.com/questions/15127648/...
Wissen Sie, ob das source-UUID ist eine v1 UUID?
abhängig von der version der UUID-Algorithmus, die es enthalten kann ein timestamp.
Es kann auch enthalten, aber das ist nicht das gleiche wie Konvertierung der vollständige Wert. Wenn die Frage war "Wie kann ich extrahieren der Zeitstempel Teil einer UUID" dann wäre das eine andere Sache.
Wissen Sie, ob das source-UUID ist eine v1 UUID?
timeStamp()
gibt einen Zeitstempel gemessen in 100-Nanosekunden-Einheiten seit Mitternacht, dem 15 Oktober 1582 UTC ; Date(long date)
erwartet Millisekunden seit dem 1. Januar 1970, 00:00:00 GMT. So haben Sie zum konvertieren von einem format in das andereabhängig von der version der UUID-Algorithmus, die es enthalten kann ein timestamp.
Es kann auch enthalten, aber das ist nicht das gleiche wie Konvertierung der vollständige Wert. Wenn die Frage war "Wie kann ich extrahieren der Zeitstempel Teil einer UUID" dann wäre das eine andere Sache.
InformationsquelleAutor BALASCJP | 2013-03-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der javadoc für
UUID
sagt das folgende über das timestamp-Feld:(Hervorhebung von mir)
Java-timestamp ist in Millisekunden) seit 1970-01-01. Um einen sinnvollen Zeitpunkt aus einer UUID, müssen Sie zwei Dinge tun: konvertieren von 100ns bis 1ms Präzision (Division durch 10000) und Stellungswechsel von 1582-10-15 1970-01-01, die Sie tun können, indem Sie eine Konstante mit dem Wert.
WolframAlpha sagt uns , dass 1582-10-15 entspricht einem UNIX timestamp von
-12219292800
, so bekommen Sie das richtige Datum haben, müssen Sie hinzufügen12219292800
um die Anzahl der Millisekunden, die Sie nach der Division durch 10000.Als Anmerkung:
...so stellen Sie sicher, dass Ihr code immer nur auf Typ-1-UUID ist, oder behandeln kann, dass Sie nicht über einen timestamp.
Du meinst
new Date(uid.timeStamp() / 10000L + 12219292800L)
? Ich könnte Ihnen ein Beispiel geben, aber ich bin sicher, Sie können es herausfinden :).ya sicher Dank...
Von dem, was ich getestet habe, die Antwort ist falsch. Siehe support.datastax.com/entries/... für eine Lösung, die funktionierte gut für mich.
-12219292800
entspricht der unix-Datum/Zeit der1582-10-15 00:00:00
im Sekunden, nicht Millisekunden, so dass sein könnte, was sich über diese Antwort. Sollten Sie mehrere dieser Konstanten durch 1000, um den Wert in Millisekunden, so dass Sie können fügen Sie es zu der uuid, der Zeitstempel, die wurde geteilt durch 10000 um es zu bekommen, in Millisekunden. Auf diese Weise sind Sie sowohl in Millisekunden. Fügen Sie die beiden Zeitstempel, da der gregorianische timestamp ist eine negative Zahl in Beziehung zur Epoche timestamp.InformationsquelleAutor Barend