01
时间是什么?是那个天文学意义上的,现实生物中无处不在的,根据日出日落而计算出来的一天=24小时,这么一个简单的概念么?
其实这个解释并没有解答我们想要知道的事实,假如说这个世界没有日出日落、地球自转、公转,那么时间还存在么?所以天文单位的时间其实只是一个用来方便计时的工具。假设没有天文上的这些因素,时间依然是向前走的,就好像植物会缓慢增长,幼年生物也会慢慢长大,那么是谁在推动这个世界的时间再往前走呢?
就好像推动时钟秒针不断向前(时间流逝)的是其中每个齿轮在不断运动,齿轮运动的源头是一个不断进行能量输出的驱动轴。找到这个轴,或许就能解释时间存在的问题。
当我们探索这个事实的时候,《我的世界》这个存在于大宇宙之中的一个小宇宙,其实就有着一个属于自己的“时间”。譬如说,为什么Minecraft的时间一个昼夜刚好是现实世界的20分钟,现实世界又好巧不巧的刚好是这个世界时间的72倍?
其实Minecraft世界的昼夜更替显然不是时间流逝的证据,就好比我们用/gamerule doDaylightCycle False 关闭昼夜更替之后,并不能阻止农作物的持续生长一样,昼夜更替停了,时间依然在慢悠悠地稳步前进,也就是说驱动Minecraft时间流逝的“另有其人”。
02
我们简单的来“上帝视角”来解释下这个问题,实际上Minecraft世界的时间本质上是由程序的不断且持续运行来决定的。
在《我的世界》中游戏程序循环一周称之为“刻”,而循环一周所需要的单位“刻”刚好=0.05秒,也就是说1秒钟可以运行20个游戏刻,循环20次。这个刻,便是Minecraft的时间单位。
有一个很有趣的事实就是,如果你的计算器硬件设备不足以跟上这个循环的计算速度,那么一个Minecraft游戏刻的时间就会被延长。更有趣的事,在服务器之中当你通过红石机构“高频”刷新时,这会导致世界计算超负载,从而拖慢世界的循环周期,改变时间的流逝。
如果我们用上帝视角来狂妄的解释下人类这个大宇宙,可以预见的是运行这个大宇宙的计算器配置绝对是令人惊叹的程度!至少它已经“稳定”的运行138亿年了!不过可惜的是,人类世界的计算机计算速度永远也无法超过人运行宇宙的这个计算机。就好像在Minecraft世界造的计算机永远也突破运行Minecraft程序的计算机一样。
03
如果我们去除上帝视角,当你身处于《我的世界》之中,当昼夜更替不再进行的时候,人们应该以怎样的方式来证明Minecraft世界的时间流逝?又应该以怎样的方式来进行计时呢?
证明时间流逝其实很简单,例如水会结成冰,植物会生长,生物会自然生成,下雨下雪时炼药锅的水和雪会不断的上升等等。
用于计时的方式也很简单,漏斗在单位时间内传输的物品数量就可以简单的作为一个时间计时装置。还有个叫作红石刻,通常一个红石刻刚好=2个游戏刻,也就是0.1秒,如红石火把、红石中继器默认延迟一个红石刻,中继器其本身可调范围为1-4个红石刻。所以计时并不是什么困难的事情。
04
那么我们弄懂了Minecraft时间“刻”的概念,人类世界运行一个周期产生的时间是什么呢?
事实上,在三维世界中,时间这个概念是人类根据原子活动周期创作出来的。三维世界时间最小的概念叫作“原子秒”,这是真正的时间单位。而在此之前一秒的原始定义是一个平均太阳日的86400分之1。
但是倘若我们开头所设定的,如果自转公转不复存在,昼夜更替消失,(流浪地球警告!)那么这个天文秒的概念将不复存在,这并不意味着时间停止流逝,原子秒以其高度的稳定性取代了天文秒。但终有一天,原子秒在我看来也是会被取代的,因为原子理论上依旧是可被停止运行的,甚至光速也可以被降低!
如果你读过三体,在同一个宇宙当中,光速的不同可以产生两种截然不同的时间,如同黑域中地光速造成的一日万年,沧海桑田。
或许在这个世界中的没有人真正能探究到时间究竟是如何产生的,我们所掌握的不过是寻找一个尽可能稳定的衡量工具罢了。
突发奇想,宇宙有没有可能因为某种频繁刷新的高负载而卡顿过呢?只不过卡顿的时候我们也不知道罢了!
实时时钟指令可以实现调用系统实时时钟或根据需要设置时钟,这样可以非常方便地记录下系统的运行时间。
实时时钟指令有2条,分别为读取实时时钟指令和设置实时时钟指令,实时时钟指令格
式,如表3-41所示。
读取实时时钟指令可以从CPU的实时时钟中,读取当前日期和时间,并将其载入以地址T起始的8个字节的缓冲区。设置实时时钟指令将当前时间和日期,以地址T起始的8个字节的形式装入PLC的时钟中。
缓冲区的8个字节,依次存放为年的低两位(16#16表示2016年)、月、日、时、分、秒、0和星期的代码;其中对于星期来说,1表示星期日;2表示星期1,7表示星期6;0表示禁用星期。时间、日期数据格式为字节型BCD码,用16进制显示格式输入和显示BCD码。缓冲区的存储格式,如表3-42所示。
案例应用
程序解析
初始化脉冲0.1激活实时时钟指令(READRTC),实时时钟指令读取当前的时间和日期,由于本例中要求读日,根据表3-42,应为VB2(即T+2),使用传送指令(MOV),将VB2中的“日”传送给VB100,之后用段译码指令(SEG)将其显示出来,日应为“2”,结果参考状态图表。
注意:时间、日期数据格式为字节型BCD码,用16进制格式输入和显示,故SEG可以显示出来。
前段时间检查项目运行情况,查看实时日志时,发现日志中打印的时间明显比北京时间慢了30分钟,这时我心中大体知道了原因并有了相应解决办法。为了印证心中想法,我关闭日志文件,在系统中使用date命令,发现时间确实是慢30分钟。
Linux经过一段时间,时间变得不准确是常见现象,主要是因为服务器上的物理时钟频率出现小幅变化,导致时间不准。这种情况会导致插入数据库数据的操作时间都是错的,定时任务没有按预定的时间执行等相关问题。
下边简单说一下如何修改linux时间。
方式一:ntpdate同步时间1.首先先检查是否安装ntpdate命令rpm -qa | grep ntpdate
使用如下命令安装(未安装请看)
yum -y install ntp ntpdate设置时间为asia.pool.ntp
ntpdate asia.pool.ntp
也可以同步时间为阿里服务器时间
ntpdate ntp1.aliyun(阿里服务器时间)同步硬件时间
hwclock --systohcntpdate命令介绍
ntpdate命令 是用来设置本地日期和时间。
语法ntpdate [ -b] [ -d] [ -s] [ -u] [ -aKeyid] [ -eAuthenticationDelay] [ -kKeyFile] [ -oVersion] [ -pSamples] [ -tTimeOut] Server...选项
-aKeyid | 使用 Keyid 来认证全部数据包。 |
-b | 通过调用 settimeofday 子例程来增加时钟的时间。 |
-d | 指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。结果再现在屏幕上。这个标志使用无特权的端口。 |
-eAuthenticationDelay | 指定延迟认证处理的时间秒数。 |
-kKeyFile | 当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。 请参阅文件KeyFile的描述。 |
-oVersion | 当轮询它的发出数据包时,指定使用的 NTP 版本实现。 Version 的值可以是 1,2,3。缺省值是 3。 |
-pSamples | 指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。 |
-s | 指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron命令时,它是很有用的。 |
-tTimeOut | 指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。 |
-u | 指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。 |
方式一确实是修改了时间,但也仅仅是修改了时间,一段时间后你会发现,时间还会变的不准确,还需要在执行上边的命令修改时间,那么有没有一种一劳永逸的方式呢?有,定时同步时间
方式二:定时同步时间crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程,和 Windows 中的计划任务类似。
查看是否安装cron定时任务服务敲入如下命令,如果什么也没返回,代表未安装。
rpm -qa | grep cron
1.1安装cron(未安装请看)yum install -y vixie-cronyum install -y crontabs
启动cron,并设置为开机自启
service crond start //启动cronchkconfig crond on //设置开机自启1.2crond相关命令
service crond start //启动服务service crond stop //关闭服务service crond restart //重启服务service crond reload //重新载入配置service crond status //查看crontab服务状态2设置定时任务,有如下两种方式2.1 crontab -e (操作方法和 Vim 是一致)
敲入如下命令
编写相应任务
2.1 直接编辑/etc/crontab 文件,添加相应的任务两种方式保存退出后,相应任务即可在指定的时间执行。至此设置定时任务已经完成。
3 crontab 文件内容介绍想必大家对 */30 * * * * 这个格式比较好奇吧,其实这个就是你规定的任务执行的时间。
下边来详细介绍下:
3.1各个字段可以使用特殊字符"*"代表所有的取值范围内的数字,如月份字段为*,则表示1到12个月;
"/"代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。
"-"代表从某个区间范围,是闭区间。如“3-7”表示“3,4,5,6,7”,小时字段中0-23/1表示在0~23点范围内每1个小时执行一次。
","分散的数字,如:1,2,7,9。
3.2例子30 22 * * * /etc/init.d/nginx restart //每晚的22:30重启 nginx。0 1 1,20 * * /etc/init.d/nginx restart //每月1、 20日凌晨1点重启nginx。0,30 1-5 * * * /etc/init.d/nginx restart //每天凌晨1点至5点之间每隔30分钟重启nginx。*/30 * * * * /usr/sbin/ntpdate 210.72.145.20 //每半小时同步一下时间* 23-5/1 * * * /etc/init.d/nginx restart //晚上11点到早上5点之间,每 隔一小时重启nginx3.3注意点
crontab中的command尽量使用绝对路径,否则会经常因为路径错误导致任务无法执行
你的赞和关注是对我最大的肯定,希望大家多多支持,谢谢大家。
大家好,我是长召。今天开始excel系列视频的第十一期:单元格设置三。如何自定义时间格式?表示日期格式的代码见下表,通过改变代码的数量和顺序可以改变日期的显示方式。
以年的代码举例,代码为yyy时显示四位数的年份,代码为yy时显示两位数的年份。这个表汇总了年、月、日、星期以及上下午不同显示的代码,记住上述代码就可以玩转时间格式了。让我们看到下方案例的示范帮助大家理解如何使用。
最简单的案例,将日期转换为星期几的形式,它的代码为aaaa,具体操作如下:
·选中单元格区域,打开单元格格式弹窗。
·选择自定义,输入aaaa,点击确定,可以看到单元格以及按照星期几的形式显示了。
·如果想让单元格按照周几的形式显示,只需要在自定义格式中输入"周"aaa就可以了。
让我们看看进阶一些的玩法,比如让日期显示为某年某月某日,只需要将单元格格式设置为yyyy"月"mm""d"日"就可以了。下方案例使用不同的代码以及显示的效果已放在表上供大家参考。
让我们看到案例八如何将文本转化为时间?这里用到分列功能。
·第一步,先选中单元格区域,在数据选项卡下数据工具组中找到分列功能,单击一下。
·在打开的弹窗中选择固定宽度,点击下一步。注意这里点击了两次。
·选择日期,其中YMD为按年月日的顺序显示,点击完成就将文本转化为日期了。
你学会了吗?本期视频到这里就结束了,如果对你有所帮助,记得收藏点赞,我们下期再见。