Comment représenter les dates avant l'époque comme un timestamp UNIX
Il m'est apparu que je ne suis pas au courant d'un mécanisme pour stocker des dates avant 1970 janv. 1 que les timestamps Unix. Depuis, cette date est la Unix "epoch" ce n'est pas une grande surprise.
Mais - même si il n'est pas conçu pour cela - je encore besoin de stocker des dates dans le passé lointain au format Unix.
J'ai besoin de ceci pour des raisons.
Donc ma question est: comment peut-on aller sur les décisions unix-les horodatages contiennent des "nuls", mais encore de travail dates? Serait le stockage d'un montant négatif de secondes de travail? Peut-on stocker des négatif montants de secondes dans un unix timestamp? Je veux dire n'est-il pas non signé?
Aussi si je suis correcte, alors je ne pouvais le store remonte aussi loin que 1901. dec. 13 20:45:52
cela pourrait-il être étendu à chaque plus loin dans l'histoire par tous les moyens?
time_t
est signé de 32 bits de type int, donc il peut revenir à 1901 comme vous l'avez constaté. Vous devriez vérifier votre système d'exploitation, beaucoup ont élargi time_t
de 64 bits, ce qui vous donne quelques centaines de milliards d'années de marge de manœuvre.OriginalL'auteur Wolfer | 2015-07-29
Vous devez vous connecter pour publier un commentaire.
Le Temps Unix est généralement un nombre de 32 bits de l'entier de secondes depuis le premier instant de 1970 UTC, le époque être
1 January 1970 00:00:00 UTC
. Cela signifie que toute une gamme de près de 136 ans, avec environ la moitié de chaque côté de l'époque. Les nombres négatifs sont plus tôt, c'est le zéro de l'époque, et le positif sont plus tard. Pour un entier signé de 32 bits, la gamme de valeurs de1901-12-13
à2038-01-19 03:14:07 UTC
.Ce n'est pas écrit dans la pierre. Eh bien, il est écrit, mais dans un tas de pierres différentes. Les anciens disent 32 bits, les plus récents 64 bits. Certains des specs, c'est que le sens est "mise en œuvre". Certains systèmes Unix utiliser un unsigned int pour développer uniquement dans le futur passé de l'époque, mais la pratique habituelle a été signé nombre. Certains utilisent un float plutôt qu'un entier. Pour plus de détails, voir l'article de Wikipedia sur la Le Temps Unix, et cette Question.
Donc, fondamentalement, votre Question n'a aucun sens. Vous devez connaître le contexte de votre langage de programmation (C standard, les autres C, Java, etc.), de l'environnement (POSIX), notamment des logiciels de bibliothèque, ou un magasin de base de données ou de l'application.
Éviter Le Comte-De-Époque
Ajoutez à cela le manque de spécificité du fait que une douzaine d'autres époques ont été utilisées par différents logiciels de systèmes, certains extrêmement populaires et communs. Les exemples incluent le 1er janvier 1601 pour le système de fichiers NTFS & COBOL, le 1er janvier 1980 pour les différents systèmes de fichiers FAT, le 1er janvier 2001 pour Apple de Cacao, et de janvier 0, 1900, pour Excel & feuilles de calcul Lotus 1-2-3.
Encore ajouter le fait que les différents niveaux de granularité de comptage ont été utilisés. En outre secondes, certains systèmes utilisent millisecondes, en microsecondes, ou nanosecondes.
Je recommande à l'encontre de suivi de la date-temps à compter de l'époque. Au lieu d'utiliser des types de données où sont disponibles dans votre langage de programmation ou de base de données.
ISO 8601
Si les types de données ne sont pas disponibles, ou lors de l'échange de données, suivez les ISO 8601 norme qui définit sensible formats de chaîne pour les différents types de date-heure de valeurs.
2015-07-29
2015-07-29T14:59:08Z
2001-02-13T12:34:56.123+05:30
2015-W31
2015-W31-3
2015-210
"2007-03-01T13:00:00Z/2008-05-11T15:30:00Z"
PnYnMnDTnHnMnS
)P3Y6M4DT12H30M5S
= "trois ans, six mois, quatre jours, douze heures, trente minutes et cinq secondes"De recherche StackOverflow.com pour beaucoup plus de Questions et de Réponses sur ces sujets.
implementation-defined
.OriginalL'auteur Basil Bourque