Что мы должны сделать, чтобы подготовиться к 2038 году?
Я хотел бы думать, что часть программного обеспечения, которое я пишу сегодня, будет использоваться через 30 лет. Но я также осознаю, что многое из этого основано на традиции UNIX - выставлять время как количество секунд с 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);
}
Результаты выполнения в:
Чт 1 января 00:00:00 1970Сб 30 авг 18:37:08 2008Вт янв 19 03:14:072038Пт 13 дек 20:45:521901Функции ctime (), gmtime () и localtime () все принимают в качестве аргумента значение времени, представляющее время в секундах с начала эпохи (00:00:00 UTC, 1 января 1970 года; см. Time (3)).
Интересно, есть ли что-нибудь проактивное в этой области в качестве программиста, или мы должны верить, что все программные системы (операционные системы) каким-то образом будут магически модернизированы в будущем?
Обновить Казалось бы, действительно 64-битные системы защищены от этого:
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));
}
}
Ср 31 дек 16:00:00 по тихоокеанскому времени 1969Сб 30 августа 12:02:40 PDT 2008Сб 16 августа 23:12:55 PST292278994Вс дек 02 08:47:04 PST292269055Но как насчет 292278994 года?