J'aime à penser que certains des logiciels que j'écris aujourd'hui seront utilisés dans 30 ans. Mais je suis également conscient qu'une grande partie de ces logiciels est basée sur la tradition UNIX d'exposer le temps comme le nombre de secondes depuis 1970.
#include <stdio.h>
#include <time.h>
#include <limits.h>
void print(time_t rt) {
struct tm * t = gmtime(&rt);
puts(asctime(t));
}
int main() {
print(0);
print(time(0));
print(LONG_MAX);
print(LONG_MAX+1);
}
L'exécution a pour résultat :
- Thu Jan 1 00:00:00 1970
- Sat Aug 30 18:37:08 2008
- Mar Jan 19 03:14:07 2038
- Fri Dec 13 20:45:52 1901
Les fonctions ctime(), gmtime() et localtime() prennent toutes comme argument une valeur de temps représentant le temps en secondes depuis l'époque (00:00:00 UTC, 1er janvier 1970 ; voir time(3) ).
Je me demande s'il y a quelque chose de proactif à faire dans ce domaine en tant que programmeur, ou devons-nous croire que tous les systèmes logiciels (alias systèmes d'exploitation) seront d'une manière ou d'une autre magiquement mis à jour dans le futur ?
Mise à jour Il semblerait que les systèmes 64 bits soient effectivement à l'abri de ce problème :
import java.util.*;
class TimeTest {
public static void main(String[] args) {
print(0);
print(System.currentTimeMillis());
print(Long.MAX_VALUE);
print(Long.MAX_VALUE + 1);
}
static void print(long l) {
System.out.println(new Date(l));
}
}
- Wed Dec 31 16:00:00 PST 1969
- Sat Aug 30 12:02:40 PDT 2008
- Sat Aug 16 23:12:55 PST 292278994
- Sun Dec 02 08:47:04 PST 292269055
Mais qu'en est-il de l'année 292278994 ?
2 votes
Vous seriez heureux si vous étiez présent pour être tenu responsable d'un accident de cette année-là, n'est-ce pas ?
33 votes
Ne vous inquiétez pas pour l'année 292278994. La plupart des systèmes tombent en panne à l'année 2147483647.
5 votes
Je pense que vous nous avez convaincus - nous devons passer à 128 bits immédiatement !
3 votes
La fin du monde est prévue pour 2012, pourquoi auriez-vous besoin de mesurer le temps au-delà de cette date ?
0 votes
À ce moment-là, le soleil sera une géante rouge et l'humanité aura disparu :D
1 votes
Bonjour de 2021 ! Linux 5.6 et plus sont prêts à fonctionner au-delà de l'année 2038 sur les systèmes 32 bits : lkml.org/lkml/2020/1/29/355?anz=web