私が現在書いているソフトウェアのいくつかは、30 年後に使用されると思います。しかし、その多くが 1970 年以降の秒数として時間を公開するという UNIX の伝統に基づいていることも認識しています。
#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);
}
実行結果は次のとおりです。
- 1970 年 1 月 1 日(木)00:00:00
- 土 8 月 30 日 18:37:08 2008
- 火曜日 1 月 19 日 03:14:07 2038
- 金 12 月 13 日 20:45:52 1901
関数 ctime()、gmtime()、および localtime() はすべて、エポック (00:00:00 UTC、1970 年 1 月 1 日; 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));
}
}
- 1969 年 12 月 31 日水曜日 16:00:00 PST
- 2008 年 8 月 30 日 12:02:40 PDT
- 8 月 16 日(土)23:12:55 PST 292278994
- 日 12 月 2 日 08:47:04 PST 292269055
しかし、292278994 年はどうでしょうか。