Comment tester si un horodatage donné est en secondes ou en millisecondes?
Supposons qu'une variable donnée, il est contenant un UNIX
de l'heure, mais si elle est en secondes ou millisecondes format est inconnu, je veux attribuer à une variable qui est en secondes format
Par Exemple:
unknown = 1398494489444 # This is millisecond
t = ???
Mise à jour: je comprends qu'il n'est pas possible de dire sans donner certaines limites, de sorte qu'ici il
- current_ts - 86400 * 365 < inconnu < current_ts
Assume current_ts = current unix timestamp
source d'informationauteur Ryan
Vous devez vous connecter pour publier un commentaire.
Si vous convertir le maximum des valeurs d'horodatage avec x chiffres dans millis, vous obtenez quelque chose comme ceci:
Votre horodateurs être âgés de plus de 2001? Sinon, je pense que vous êtes sûr de vérifier si le numéro de 13 chiffres ou plus - si oui, vous avez millisecondes, si vous n'avez secondes. Bien sûr, cela ne fonctionnera que jusqu'à ce que les horodatages dans les secondes ont 13 chiffres, ce qui signifie que les horodatages en millisecondes aura 16 chiffres:
P. S. vous pouvez relâcher la condition à 12 chiffres ou plus, si votre horodatage peut pas remonter plus loin que 1973. L'état ne devrait être ok jusqu':
parce que cela en quelques secondes disposeront de 12 chiffres et se chevauchent avec votre état
Au risque d'attirer les downvotes, je veux aller sur le disque comme disant de NE PAS le FAIRE.
De faire des hypothèses sur les unités de quantité physique est une idée terrible - il conduit à la destruction de la Mars Météorologique De L'Orbiteur (le calcul des unités de poussée sont dans les livres, les moteurs devraient Newtons. Pas assez de poussée et de l'orbiteur brûlé dans l'atmosphère).
Si vous avez une assez bonne idée de l'ampleur d'un certain nombre, vous devriez être en mesure de faire une estimation à l'unité. Par exemple, si je vous dis mon poids est de 230, vous pouvez me regarder et de penser "je parie que c'est livres, pas des kilos". De même, si vous convertissez un horodatage de mon anniversaire, à une date sur l'hypothèse qu'il était en quelques secondes, et il s'avère être de 200 ans dans le futur, vous pouvez raisonnablement supposer que les "secondes" n'est pas l'unité.
Mais il est une chose DANGEREUSE à faire.
Encore - si vous avez à le faire, alors en général, je recommande l'approche suivante:
Que la dernière chose, c'est important - il va vous permettre d'apprendre à partir de votre erreur. Par exemple, si votre temps de timbre vous dit quelque chose à ce sujet lorsque la comète se présentera, vous pouvez imprimer des
De cette façon, il y a des "come back". En général, "document votre hypothèses" n'est pas seulement de bons conseils - il est essentiel dans toute science exacte.
Enfin - la conversion d'un horodatage à partir de ms s est obtenu en divisant le nombre par 1000. Mais je suis sûr que vous le savez.
Avec vos contraintes, c'est facile à détecter à la milliseconde horodateurs. Même les horodatages d'un an dans le passé sont toujours les magnitudes plus grand que le timestamp actuel.
Simplement tester si le nombre est plus grand que le timestamp actuel; si donc, vous avez un temps en millisecondes:
En divisant par 1000, vous convertir le timestamp à un retour exprimée en secondes et la valeur par défaut
time
les fonctions du module peut être appliquée.C'est parce que même un temps en millisecondes représentant d'un an dans le passé, accidentellement interprété comme un timestamp en quelques secondesserait mentir loin dans l'avenir:
Vous devez avoir un horodatage au début de 1970 avant que vous pourriez confondre les deux gammes:
E. g. les horodatages dans les 17 premiers jours après l'époque UNIX, susceptible d'être confondu pour l'horodatage en millisecondes. Tout après cette date va être plus grand qu'un 'heure actuelle' timestamp.
Avec vos contraintes, vous avez de la chance que nous pouvons garder les deux unités distinctes si facilement. Le meilleure option est de ne pas se mettre dans cette situation en premier lieu. Ces données provenant de quelque part; déterminer le plus tôt possible ce type de données que vous avez au lieu d'avoir à deviner la suite. Pas de système, de façon aléatoire, de vous donner les horodatages en quelques secondes de temps en temps, horodateurs, en millisecondes, le reste du temps. Certes, vous pouvez savoir sur la base d'autres informations de ce type de données que vous sourcing et de la convertir à l'époque ou d'annoter vos données à inclure dans le type?