Comment puis-je extraire une date à partir d'un UUID à l'aide de Java?
Comment convertir le UUID
de format de date 2011-04-22
?
Par exemple, j'ai UUID comme ce
118ffe80-466b-11e1-b5a5-5732cf729524.
Comment faire pour convertir ce format de date?
J'ai essayé
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();
}
sortie j'ai eu:4294744/11/02
Même cas de travail d'amende pour 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";
veuillez vérifier avec l'url stackoverflow.com/questions/15127648/...
Savez-vous si cette source UUID est un v1 UUID?
selon la version de l'UUID de l'algorithme, il peut contenir un timestamp.
Il se pourrait bien contient, mais ce n'est pas la même chose que la conversion de la valeur. Si la question avait été "Comment extraire la partie horodatage d'un UUID" qui serait une autre affaire.
Savez-vous si cette source UUID est un v1 UUID?
timeStamp()
retourne un timestamp mesurée à 100 nanosecondes unités depuis minuit, le 15 octobre 1582 UTC ; Date(long date)
attend de millisecondes depuis le 1er janvier 1970, 00:00:00 GMT. Donc, vous devez convertir d'un format à l'autreselon la version de l'UUID de l'algorithme, il peut contenir un timestamp.
Il se pourrait bien contient, mais ce n'est pas la même chose que la conversion de la valeur. Si la question avait été "Comment extraire la partie horodatage d'un UUID" qui serait une autre affaire.
OriginalL'auteur BALASCJP | 2013-03-02
Vous devez vous connecter pour publier un commentaire.
La javadoc de
UUID
dit ce qui suit sur le champ timestamp:(l'emphase est mienne)
La Java timestamp est en millisecondes écoulées depuis le 1970-01-01. Afin d'obtenir une date significative à partir d'un UUID, vous aurez besoin de faire deux choses: convertir de 100 ns à 1 ms précision (diviser par 10000) et rebase de 1582-10-15 à 1970-01-01, vous pouvez le faire en ajoutant une valeur constante.
WolframAlpha nous dit que 1582-10-15 correspond à un timestamp UNIX de
-12219292800
, de sorte à obtenir la bonne date, vous devez ajouter12219292800
le nombre de millisecondes que vous avez obtenu après division par 10000.Comme une note de côté:
...donc, assurez-vous que votre code soit ne rencontre jamais de Type 1 UUID, ou peut gérer qu'ils n'ont pas un horodatage.
Tu veux dire
new Date(uid.timeStamp() / 10000L + 12219292800L)
? Je pourrais vous donner un exemple, mais je suis sûr que vous pouvez le comprendre :).ya assurez-vous grâce...
De ce que j'ai testé la réponse est fausse. Voir support.datastax.com/entries/... pour une solution qui a bien fonctionné pour moi à la place.
-12219292800
correspond à la unix date/heure de1582-10-15 00:00:00
dans secondes, pas millisecondes, de sorte que peut-être ce qui est hors sujet de cette réponse. Vous devriez multiples cette constante par 1000 pour obtenir la valeur en millisecondes, de sorte que vous pouvez ensuite l'ajouter à l'uuid d'horodatage, qui a été divisé par 10000 pour l'obtenir en millisecondes. De cette façon, ils sont tous les deux en millisecondes. Vous ajoutez les deux horodateurs parce que le grégorien timestamp est un nombre négatif dans la relation à l'époque d'horodatage.OriginalL'auteur Barend