为什么计算机和一些电子产品的时间选择在1970.1.1

本文深入探讨了计算机时间的计算与显示原理,包括时间基准的选择、时间表示方式的演变以及现代计算机如何采用简单计时系统。文章详细解释了Unix时间的起源及其在编程中的应用,并对比了格林尼治标准时间(GMT)与世界协调时间(UTC)。此外,文章还阐述了时间回归现象的原因以及64位系统如何解决这一问题。最后,通过实例展示了如何在Java中使用Unix时间,并解释了时间显示与系统时区之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在计算机和一些电子设备时间的计算和显示是以距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量为标准的,如1970-1-10 20:47 偏移量为2724441632毫秒,出现类似字样说明时间被初始化了。

小知识:
格林威治标准时间GMT
许多人都知道两地时间表简称为GMT或UTC,而世界时区表则通称为World Time
,那么GMT与UTC的实质原意又是为何?世界时区又是怎么区分的?面盘上密密麻麻
的英文单字代表着什么意义与作用呢?这些都是新手在接触两地时间表或世界时区表
时,脑海中所不断浮现的种种疑问,以下将带您一探时区奥妙的究竟。

全球24个时区的划分
相较于两地时间表,可以显示世界各时区时间和地名的世界时区表(World Time)
,就显得精密与复杂多了,通常世界时区表的表盘上会标示着全球24个时区的城市名
称,但究竟这24个时区是如何产生的?过去世界各地原本各自订定当地时间,但随着
交通和电讯的发达,各地交流日益频繁,不同的地方时间,造成许多困扰,于是在西
元1884年的国际会议上制定了全球性的标准时,明定以英国伦敦格林威治这个地方为
零度经线的起点(亦称为本初子午线),并以地球由西向东每24小时自转一周360°
,订定每隔经度15°,时差1小时。而每15°的经线则称为该时区的中央经线,将全球划
分为24个时区,其中包含23个整时区及180°经线左右两侧的2个半时区。
就全球的时间来看,东经的时间比西经要早,也就是如果格林威治时间是中午12时,
则中央经线15°E的时区为下午1时,中央经线30°E时区的时间为下午2时;反之,中央
经线15°W的时区时间为上午11时,中央经线30°W时区的时间为上午10时。以台湾
为例,台湾位于东经121°,换算后与格林威治就有8小时的时差。如果两人同时从格
林威治的0°各往东、西方前进,当他们在经线180°时,就会相差24小时,所以经线180°
被定为国际换日线,由西向东通过此线时日期要减去一日,反之,若由东向西则要增 ,
加一日。


十七世纪,格林威治皇家天文台为了海上霸权的扩张计画而进行天体观测。1675年旧
皇家观测所(Old Royal Observatory) 正式成立,到了1884年决定以通过格林威治
的子午线作为划分地球东西两半球的经度零度。观测所门口墙上有一个标志24小时的
时钟,显示当下的时间,对全球而言,这里所设定的时间是世界时间参考点,全球都
以格林威治的时间作为标准来设定时间,这就是我们耳熟能详的「格林威治标准时间
(Greenwich Mean Time,简称G.M.T.)的由来,标示在手表上,则代表此表具有
两地时间功能,也就是同时可以显示原居地和另一个国度的时间.
世界协调时间UTC
多数的两地时间表都以GMT来表示,但也有些两地时间表上看不到GMT字样,出现的
反而是UTC这3个英文字母,究竟何谓UTC?事实上,UTC指的是Coordinated Universal
世界协调时间(又称世界标准时间、世界统一时间),是经过平均太阳时(以格
林威治时间GMT为准)、地轴运动修正后的新时标以及以「秒」为单位的国际原子时所
综合精算而成的时间,计算过程相当严谨精密,因此若以「世界标准时间」的角度来
说,UTC比GMT来得更加精准。其误差值必须保持在0.9秒以内,若大于0.9秒则由位
于巴黎的国际地球自转事务中央局发布闰秒,使UTC与地球自转周期一致。所以基本
上UTC的本质强调的是比GMT更为精确的世界时间标准,不过对于现行表款来说,
GMT与UTC的功能与精确度是没有差别的

从1884年起,格林威治标准时间为其他国家所承认。无怪
现在人们都把英国的格林威治天文台说成是“时间开始的地方”呢。

而为什么现代计算机(电话,电子设备)时间以1970 年 1 月 1 日的 00:00:00.000为基准呢,这是Unix**, 是以Unix诞生的时间为参照确定的。

扩展知识:
Unix时间并没有出现错误

1234567890是个节日, 一秒钟的节日. 它不是问题, 不是错误, 不是BUG. 我们人类使用的计时系统是相当复杂的:秒是基本单位, 60秒为1分钟, 60分钟为1小时, 24小时是一天......如果计算机也使用相同的方式来计时, 那显然就要用多个变量来分别存放年月日时分秒, 不停的进行进位运算, 而且还要处理偶尔的闰年和闰秒以及协调不同的时区. 基于"追求简单"的设计理念, UNIX在内部采用了一种最简单的计时方式:

计算从UNIX诞生[注释1]的UTC时间1970年1月1日0时0分0秒起, 流逝的秒数. UTC时间1970年1月1日0时0分0秒就是UNIX时间0, UTC时间1970年1月2日0时0分0秒就是UNIX时间86400. 这个计时系统被所有的UNIX和UNIX-like系统继承了下来, 而且影响了许多非UNIX系统. POSIX标准推出后, 这个时间也被称为POSIX时间.

UNIX时间错误是误解

可能是因为人类是一种需要精神上的刺激的生物吧, 各种历法中都存在着各种拥有不同意义的节日. 其中, 很多节日仅仅由于日期的特殊性就被赋予了意义, 例如公历1月1日的新年, 11月11日的光棍节,爱好节日的人们也没有放过UNIX时间. UTC时间2001年9月9日1时46分40秒, UNIX时间迎来了第一个"亿禧年"(Billennium)[注释2],  1000000000. UTC时间2005年3月18日1时58分31秒则是UNIX时间的光棍节, 1111111111. 刚刚过去的1234567890, 对应公历的UTC2009年2月13日23时31分30秒, 对东一区以东的时区来说是2月14日情人节, 以西的时区来说则刚好落在黑色星期五. 传统上认为黑色星五不吉利的西方媒体, 针对此事进行了玩笑性的报道, 结果被一些居住在其他时区的人们误读成了"UNIX时间错误"。

 

丹麦哥本哈根的丹麦UNIX用户群组织庆祝UNIX"亿禧年" 图为当时所用的倒计时公告牌

无独有偶, 2012年7月13日也是一个黑色星期五, 而那天的UTC时间11时1分20秒对应着UNIX时间0x50000000(十六进制, 十进制值是1342177280). 不知到了那个时候, 会不会再次有人把它误解为又一次的UNIX时间错误?

2038年的问题才是混乱

UTC时间2033年5月18日3时33分20秒, 是UNIX时间的第二个"亿禧年"(Billenniumm), 即2000000000. 然而, 第三个"亿禧年"(Billennium)则不会毫无障碍的来临, 在那之前, 人们先得解决正在变得著名的2038年问题. 和本世纪初的千年虫(Y2K Bug)问题类似, 2038年问题(Y2K38 BUG)更隐蔽, 而且更难解决. 我们知道计算机内部的一切都是二进制的, 也就是说1234567890在32位系统的内存里实际上是01001001 10010110 00000010 11010010. 这串32位二进制数中, 最高位被用来表示正负符号, 0代表整数, 1代表负数, 所以它能表示的最大数字就是01111111 11111111 11111111 11111111, 即214748367, 对应公历的UTC时间2038年1月19日3时14分7秒. 到这天的凌晨3时14分8秒, UNIX时间会溢出并变成10000000 00000000 00000000 00000000(十进制值-214748368), 也就是UTC时间1901年12月13日20时45分52秒, 引起和千年虫类似的混乱.



2038年问题的动画演示

或许64位可以解决这个问题

2038年问题不仅比千年虫更隐蔽, 而且它的原因也更接近系统底层. 要解决这个问题, 最简单的方式是扩展UNIX时间的长度, 用64位数字来表示它. 64位二进制数的实际可用位数是63位, 最大表示到公历的UTC时间292277026596年12月4日. 如果那个时候人类文明还存在的话, 公元纪年很可能已经因为太难用而被抛弃了. 理想的情况是到2038年, 64位系统已经成为主流, 从而避免特意去修正这个问题所需要的大量开销. 否则, 人们就必须把新的64位时间拆分成两部分并分别保存在两个变量里, 这是一个麻烦而且效率低下的选择.

[注释1]: 就像很多其他的节日一样, 把UNIX的诞生日选在这天只是出于方便. 实际上, 最早的运行在PDP-7上的UNIX在1969年就已经完成了.

[注释2]: Billennium实际上是"十亿禧年", 但是这样听起来很奇怪, 所以我用"亿禧年"作为暂用名.

 

 

 

 

The epoch is the point where the time starts. On January 1st of that year, at 0hours,the “time since the epoch” is zero. For Unix, the epoch is 1970. To find out what the epoch is, look at gmtime(0).


定义time197011日开始,忽然想到在JAVA里,Oracle数据库时间也是从1970
11日开始计算。比如java类代码

Date date = new Date(0);
System.out.println(date);

打印出来的结果:

Thu Jan 01 08:00:00 CST 1970

也是197011日,实际上时分秒是000(这里打印出来是8点,稍后会作解释)

为什么这个时间会定义在197011日这个时候呢?

于是开始了Google,中文网页根本找不到答案。于是试着搜索英文关键字,Sunjava论坛总算找到准确的帖子:

http://forums.sun.com/thread.jspa?threadID=595140&start=15

其中有一个回复:


I suspect that Java was born and raised ona UNIX system.
UNIX considers the epoch (when did time begin)to be midnight, January 1, 1970.

是说java起源于UNIX系统,而UNIX认为1970110点是时间纪元.

但这依然没很好的解释"为什么",出于好奇,继续Google,总算找到了答案:

http://en.wikipedia.org/wiki/Unix_time

这里的解释是:

最初计算机操作系统是32位,而时间也是用32位表示。

System.out.println(Integer.MAX_VALUE);
2147483647



IntegerJAVA内用32位表示,因此32位能表示的最大值是2147483647。另外1365天的总秒数是31536000,

2147483647/31536000 = 68.1

也就是说32位能表示的最长时间是68年,而实际上到20380119031407
秒,便会到达最大时间,过了这个时间点,所有32位操作系统时间便会变为
10000000 00000000 00000000 00000000

也就是19011213204552秒,这样便会出现时间回归的现象,很多软件便会运行异常了。

到这里,我想问题的答案已经出来了:

因为用32位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算
机产生的年代和应用的时限综合取了
197011日作为UNIXTIME的纪元时间(开始
时间
),而java自然也遵循了这一约束。

至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作
系统可以表示到
292,277,026,596124153008秒,相信我们的N代子孙,哪
怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后了。

最后一个问题:上面System.out.println(new Date(0)),打印出来的时间是8点而非0点,
原因是存在系统时间和本地时间的问题,其实系统时间依然是0点,只不过我的电脑时区
设置为东8区,故打印的结果是8点。

我想以上问题如果作为面试题,也能难倒一批人了.

 

<think>好的,我现在需要帮助用户解决如何用鱼骨图展示计算机控制系统的历程以及带有物联网工业互联网概念的SCADA系统架构设计的问题。首先,我需要理解用户的需求。用户提到了计算机控制系统的发展SCADA系统架构,特别是要结合物联网工业互联网的概念,同时使用鱼骨图来展示这些内容。此外,用户还提供了两个参考文献,关于物联网下的SCADA系统架构类型以及物联网与SCADA系统的异同点。 首先,我应该回忆鱼骨图的基本结构用途。鱼骨图,也叫因果图或石川图,通常用于分析问题的根本原因,主干指向问题,分支表示不同类别的原因。但用户希望用鱼骨图来展示发展历程架构设计,这可能需要稍微调整传统鱼骨图的用法,将主干作为时间线或主要架构,分支作为各个阶段或组成部分。 接下来,我需要整理计算机控制系统的发展历程。根据我的知识,计算机控制系统的发展大致可以分为几个阶段:早期机械控制、模拟电子控制、数字计算机控制、PLC(可编程逻辑控制器)的引入、分布式控制系统(DCS)、SCADA系统的出现,以及近年来的物联网工业互联网的整合。这些阶段需要按时间顺序排列在鱼骨图的主干上,每个阶段作为主分支,再细分关键技术或事件作为子分支。 然后是SCADA系统架构设计部分,用户提到要结合物联网工业互联网。根据引用[1],物联网下的SCADA系统架构包括集中式、分布式边缘计算架构。此外,工业互联网可能涉及云计算、大数据分析、实时数据处理等。因此,在架构设计的鱼骨图中,主干可以是SCADA系统架构,主分支包括传统架构(集中式、分布式)现代架构(边缘计算、物联网集成、工业互联网平台),子分支则详细说明各部分组件,如传感器、通信网络、云平台等。 需要考虑如何将这两个主题整合到一张鱼骨图中,或者是否需要分开绘制。可能更清晰的是分开两个鱼骨图:一个用于计算机控制系统的发展历程,另一个用于SCADA系统架构设计。不过用户可能希望在同一图中展示两者的关联,所以需要找到共同的主线,例如以时间发展为轴,将架构演变作为分支的一部分。 另外,用户提供的引用[2]指出物联网SCADA系统有共同特点,如体系架构、数据采集、通讯网络依赖等,但也存在差异。这提示在架构设计中需要突出物联网带来的变化,比如边缘计算、云平台集成、大数据应用等。 绘制步骤方面,用户可能需要具体的指导,例如使用什么工具(如Visio、Lucidchart、甚至手绘),如何布局,各部分应包含的内容。例如,在计算机控制系统发展的鱼骨图中,主干是时间线,分支是各个发展阶段,每个阶段下再列关键技术事件。对于SCADA架构,主干是架构类型,分支是各个层级或组件,并标注物联网工业互联网的影响。 可能还需要考虑示例图的结构,但由于无法直接绘图,可以用文字描述鱼骨图的结构,比如主骨、大骨、中骨、小骨的具体内容,并用列表或分点说明。同时,结合用户提供的引用文献,确保内容准确,特别是关于SCADA架构类型的部分需要引用[1]中的集中式、分布式边缘计算架构。 最后,用户可能需要相关的问题,如如何选择架构类型,物联网对SCADA的影响,或工具推荐。根据要求,生成三个相关问题,并确保问题与主题相关,能够引导进一步探讨。 总结下来,我的回答需要分为两部分:计算机控制系统发展的鱼骨图设计步骤SCADA架构的鱼骨图设计步骤,每个部分详细说明主分支子分支的内容,引用提供的文献,最后给出相关问题。</think>### 鱼骨图绘制方法 #### **1. 计算机控制系统发展历程的鱼骨图设计** - **主骨(核心主题)**:计算机控制系统的技术演进 - **大骨(主要阶段分支)**: 1. **机械控制时代**(1940s前) - 中骨:机械调速器、气动控制器 2. **模拟电子控制**(1950s-1960s) - 中骨:PID控制器、模拟电路实现 3. **数字计算机控制**(1970s) - 中骨:微处理器、实时操作系统 4. **PLC与DCS**(1980s-1990s) - 中骨:可编程逻辑控制器(PLC)、分布式控制系统(DCS) 5. **SCADA系统普及**(2000s) - 中骨:远程监控、数据采集与处理[^2] 6. **物联网与工业互联网**(2010s至今) - 中骨:边缘计算、云平台集成、5G通信[^1] - **示例结构**: ```text 机械控制时代 —— 模拟电子控制 —— 数字计算机控制 —— PLC与DCS —— SCADA系统 —— 物联网/工业互联网 ↓ ↓ ↓ ↓ ↓ ↓ 调速器 PID控制器 微处理器 PLC 远程监控 边缘计算 气动控制 模拟电路 实时系统 DCS 数据采集 云平台 ``` --- #### **2. 物联网/工业互联网下的SCADA架构鱼骨图** - **主骨(核心主题)**:SCADA系统架构设计 - **大骨(架构层级)**: 1. **感知层** - 中骨:传感器、执行器、RFID标签 - 小骨:温度/压力传感器、工业摄像头 2. **网络层** - 中骨:工业以太网、5G、LoRaWAN - 小骨:OPC UA协议、MQTT通信[^1] 3. **边缘计算层** - 中骨:本地数据处理、实时分析 - 小骨:边缘网关、协议转换 4. **云平台层** - 中骨:大数据存储、AI分析 - 小骨:AWS IoT、Azure Industrial IoT 5. **应用层** - 中骨:远程监控、预测性维护 - 小骨:HMI界面、移动端APP - **物联网融合标注**: - 在边缘层云层添加标注:“支持物联网设备接入” - 在网络层标注:“工业互联网协议(如TSN)” --- #### **工具与实现建议** 1. **推荐工具**: - **Visio**:使用“因果图”模板,自定义分支层级。 - **Lucidchart**:拖拽式操作,适合协作设计。 2. **关键标注**: - 用不同颜色区分传统架构(灰色)与物联网新增部分(蓝色)。 - 在SCADA架构图中,将“边缘计算”“云平台”标为技术演进重点。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值