相关疑难解决方法(0)

我们该怎么做才能为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);
}
Run Code Online (Sandbox Code Playgroud)

执行结果:

  • 1970年1月1日00:00:00
  • 2008年8月30日星期六18:37:08
  • 星期二1月19日3时14分07秒2038
  • 12月13 星期五20:45:52 1901

函数ctime(),gmtime()和localtime()都将一个时间值作为参数,该时间值表示自Epoch(1970年1月1日00:00:00 UTC;参见时间(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));
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 12月31日星期三16:00:00太平洋标准时间1969年
  • 2008年8月30日星期六12:02:40 PDT 2008
  • 8月16日星期六23:12:55太平洋标准时间292278994
  • 太阳12月02日08:47:04太平洋标准时间292269055

但那一年292278994呢?

unix maintainability time year2038

60
推荐指数
2
解决办法
6785
查看次数

标签 统计

maintainability ×1

time ×1

unix ×1

year2038 ×1