Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 我们应该为2038年做什么准备?_Unix_Time_Maintainability_Year2038 - Fatal编程技术网

Unix 我们应该为2038年做什么准备?

Unix 我们应该为2038年做什么准备?,unix,time,maintainability,year2038,Unix,Time,Maintainability,Year2038,我想我今天写的一些软件将在30年后使用。但我也意识到,其中很多都是基于自1970年以来以秒为单位公开时间的UNIX传统 #包括 #包括 #包括 无效打印(时间){ struct tm*t=gmtime(&rt); put(asctime(t)); } int main(){ 打印(0); 打印(时间(0)); 打印(最大长度); 打印(最大长度+1); } 执行结果如下: 1970年1月1日星期四00:00:00 2008年8月30日星期六18:37:08 1月19日星期二03:14:072

我想我今天写的一些软件将在30年后使用。但我也意识到,其中很多都是基于自1970年以来以秒为单位公开时间的UNIX传统

#包括
#包括
#包括
无效打印(时间){
struct tm*t=gmtime(&rt);
put(asctime(t));
}
int main(){
打印(0);
打印(时间(0));
打印(最大长度);
打印(最大长度+1);
}
执行结果如下:

  • 1970年1月1日星期四00:00:00
  • 2008年8月30日星期六18:37:08
  • 1月19日星期二03:14:072038
  • 12月13日星期五20:45:521901
函数ctime()、gmtime()和localtime()都将时间值作为参数,该时间值表示自纪元(UTC,1970年1月1日,00:00:00;请参见时间(3))以来的秒数

我想知道,作为一名程序员,在这方面是否有什么积极主动的做法,或者我们是否应该相信,所有软件系统(又称操作系统)将来都会得到神奇的升级

更新64位系统似乎确实安全:

import java.util.*;
课时测验{
公共静态void main(字符串[]args){
打印(0);
打印(System.currentTimeMillis());
打印(长最大值);
打印(长最大值+1);
}
静态空白打印(长l){
系统输出打印LN(新日期(l));
}
}
  • 1969年12月31日星期三太平洋标准时间16:00:00
  • 2008年8月30日星期六12:02:40太平洋标准时间
  • 8月16日星期六23:12:55太平洋标准时间292278994
  • 太平洋标准时间12月2日星期日08:47:04292269055

但是292278994年呢?

到2038年,时间库都应该使用64位整数,所以这实际上不会有什么大不了的(在不是完全未维护的软件上)

不过,COBOL程序可能很有趣。

最重要的一个词是“应该”


如果您需要确保具有前瞻性,那么您可以构建自己的日期/时间类并使用它,但只有在您认为您编写的内容将用于遗留操作系统的情况下,我才会这样做。

Visual Studio 2005中的时间已移到64位表示形式(同时仍保留了32位时间以实现向后兼容性)


只要您始终小心地以时间为单位编写代码,并且不对代码大小做任何假设,那么正如sysrqb指出的那样,问题将由您的编译器解决。

我已经为time.h编写了可移植的替换程序(目前仅为localtime()、gmtime()、mktime()和timegm()),它甚至在32位机器上使用64位时间。它打算作为时间的替代品被放入C项目中。它正在Perl中使用,我还打算用它修复Ruby和Python的2038问题。这给你一个+/-2.92亿年的安全范围

你可以找到代码。请随时将任何问题发布到网站

至于“这在接下来的29年内不会成为问题”,请仔细阅读。简而言之,事情会在未来发生,有时你需要知道什么时候发生。我也有


哦,别忘了很多时间系统不会处理1970年之前的日期。事情发生在1970年之前,有时你需要知道什么时候发生。

保存好文档,并包括对你的时间依赖性的描述。我认为很多人都没有想过这种转换会有多困难,例如HTTP cookies将在该日期中断。

您可以始终实现并永远安全;-)

已知的宇宙有一个有限的过去和未来。当代 宇宙以[Zebu]为单位估计在10*10和2*10之间** 10年。奈杰尔(Nigel)估计宇宙会死亡 在10**11年内以及在[Drake]发生在10**12年内 对于一个封闭的宇宙(大危机)是10年还是14年 开放宇宙(宇宙的热死)

符合Y10K标准的程序可以选择限制其使用的日期范围 支持那些与宇宙预期寿命一致的人。 符合Y10K标准的系统必须接受10年至12年的Y10K日期 从过去到未来的10**20年。Y10K兼容系统 应接受过去至少10年**29年的日期,以及 未来


我认为我们应该把虫子留在家里。到2036年左右,我们就可以开始以大笔资金出售咨询服务,以测试一切。毕竟,这不是我们成功管理1999-2000年过渡的方式

我只是开玩笑

1999年,我坐在伦敦的一家银行里,当我看到一位顾问开始对咖啡机进行Y2K测试时,我感到非常惊讶。我认为,如果我们从那场惨败中学到了什么,那就是绝大多数软件都能正常工作,其余大部分软件在出现故障时不会导致崩溃,如果需要,可以在事后修复。因此,除非您处理的是一个非常关键的软件,否则我不会采取任何特别的预防措施,直到时间越来越近

我们应该为2038年做什么准备

躲起来,因为天启就要来了

但说真的,我希望编译人员(确切地说是编写人员)能够处理这个问题。他们已经快30年了。我希望有足够的时间


我们什么时候开始准备10公里?有没有硬件制造商/研究实验室研究过最简单的方法来转移到我们将不得不使用的任何新技术

考虑到我的年龄,我想我应该在退休金和我所有部门的工资中花很多钱,这样其他人就必须安装这个软件了

很抱歉,如果您考虑一下您今天编写的任何软件的“净现值”,它对2038年该软件的功能没有影响。对于任何软件项目来说,超过几年的“投资回报”都是不常见的,所以你可以通过获得软件为你的雇主赚更多的钱