c / c ++ – convertir entre le temps Unix et le “temps grégorien”

J’ai maintenant des horodatages qui sont en microsecondes depuis minuit, le 1er janvier 0 après JC, un grégorien nominal, après avoir cherché, j’ai remarqué que certaines personnes appelaient cela “temps Symbian natif”? Quoi qu’il en soit, je ne sais vraiment pas comment convertir ce “temps Symbian natif” en temps Unix (temps écoulé depuis Epoch). Existe-t-il une fonction standard en C / C ++ pour ce faire?

Les exemples de données sont les suivants: 63626825878362695, 63626825878363759, 63626825878657652

  1. Vous allez avoir besoin d’arithmétique 64 bits, ou bignums.
  2. Si mon outil pour m’aider avec de telles questions est correct, il y avait 62167132800 secondes entre le 1er janvier 0000 (prolégique grégorien) et le 1er janvier 1970.
  3. Pour convertir l’heure Unix en Symbian, ajoutez 62167132800 et multipliez par 1000000.
  4. Pour convertir le temps Symbian en Unix, divisez par 1000000 et soustrayez 62167132800.

Il semble que les trois valeurs que vous avez données (qui sont toutes dans la même seconde) datent d’il ya environ 10 jours.

Année 0 AD n’existe pas vraiment 😉

Vous devriez pouvoir utiliser ICU – Composants internationaux pour Unicode , car il est capable de gérer la plupart des conversions de date et d’heure les plus courantes. Jetez un coup d’œil au paragraphe Conversion de la page Universal Time Scale – il montre comment utiliser l’ICU pour convertir différents formats de date et d’heure.