2016-05-30 4 views
0

Je veux générer un jeton (validité en seconde) pendant 20 ans. Donc, le nombre total de seconde en 20 ans sont: 631152000. Voici un code de génération de jetons:comment stocker le nombre de secondes dans la variable en java

long tokenLifetInSecond=631152000; 
    long expiryTime = System.currentTimeMillis(); 
    expiryTime += 1000L * tokenLifetimeInSecond; 

donc le résultat de expiryTime = 2095766040489. Est-ce que l'utilisation de long est un coffre-fort car il peut stocker 2 milliards d'enregistrements?

+0

Par curiosité: quel genre de système vous travaillez qui exige "jetons" valable pour 20 ans? – GhostCat

+0

Hypothèques peut-être? –

+0

Le jeton Well utilisera dans un terminal autonome pour accéder à un service. En simple je veux générer un jeton de temps de vie –

Répondre

0

Long.MAX_VALUE: 9223372036854775807

+0

Merci pour la mise à jour i si la limite est de 2 milliards seulement. –

+0

c'est mon plaisir, oui il peut – Moolerian

0

Vous pouvez utiliser Big Integer dans java ou stocker cette valeur dans String.

+0

bien API requis pour donner de la valeur en long. –

0

La plus grande valeur représentable par un long est:

9.223.372.036.854.775.808

maintenant tokenLifetimeInSeconds est

631.152.000

et en millisecondes qui est

631,152,000,000

qui s'intégrera facilement dans un long. Votre valeur fournie

2.095.766.040.489

fera aussi bien.

Je dirais que votre schéma de codage de jetons va être OK. En fait, votre code est susceptible d'être bon jusqu'à l'année 292,277,026,576 AD.

Référence:

+0

Merci beaucoup pour plus de clarification. J'ai oublié où je lis longue limite est de 2 milliards ou de stocker jusqu'à 2 milliards de sorte que confus. Merci à tous –

+0

@ user526206 - La limite de ~ 2 milliards est pour les entiers signés de 32 bits; c'est-à-dire 'int' en Java. –

+0

Très intéressant. L'expiration des jetons vérifiés par la sécurité du printemps espère qu'ils auront quelque chose à éviter. Je vais vérifier le code source. –