Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.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
Datetime 计算机如何计算日期信息?_Datetime - Fatal编程技术网

Datetime 计算机如何计算日期信息?

Datetime 计算机如何计算日期信息?,datetime,Datetime,大多数语言都有某种日期函数,您实际上不必进行任何编程就可以获得任何日期信息,只需从日期函数/对象中获取。我很好奇是什么让这一切在幕后发生的?每台计算机都有一个系统时钟来记录日期和时间。在最低级别上,从中检索日期和时间信息。在上面添加时区信息等,从操作系统,你得到一个日期对象或类似的东西 根据您的语言/环境,日期对象可以自己执行日期计算,也可以使用其他函数来实现。这些可以确保闰年得到正确处理,并且不能创建无效日期 但也许我误解了你的问题。日期和时间信息通常由操作系统提供,所以它是一个系统调用。操作

大多数语言都有某种日期函数,您实际上不必进行任何编程就可以获得任何日期信息,只需从日期函数/对象中获取。我很好奇是什么让这一切在幕后发生的?

每台计算机都有一个系统时钟来记录日期和时间。在最低级别上,从中检索日期和时间信息。在上面添加时区信息等,从操作系统,你得到一个日期对象或类似的东西

根据您的语言/环境,日期对象可以自己执行日期计算,也可以使用其他函数来实现。这些可以确保闰年得到正确处理,并且不能创建无效日期


但也许我误解了你的问题。

日期和时间信息通常由操作系统提供,所以它是一个系统调用。操作系统处理安装在计算机主板上的实时时钟,并由小型电池供电(持续数年)。

通常,计算机存储自过去某个特定时间和日期以来某个时间单位经过的次数。例如,在Unix系统中,这可能是自Unix纪元(1970年1月1日格林威治标准时间午夜)以来的秒数。在Windows中,这是自1601-01-0以来的100 ns间隔数(感谢约翰内斯·勒塞尔)。也可以是简单的,比如电脑开机后的秒数

因此,根据自该时间/日期以来经过的单位数量,操作系统可以计算经过的年、月、日等数量。当然,所有有趣的事情,如闰年和闰秒,都必须考虑到这一点


诸如的系统可用于通过网络上的NTP服务器将计算机的内部计数与原子钟同步。为此,NTP会考虑往返时间,并通过与NTP服务器的链接了解错误的种类。

您的计算机有一个系统时钟,BIOS有一个计时器功能,可以从操作系统更新。语言只从那里获取信息,有些语言还可以更新信息。

嗯。。。大多数计算机都有一个“”按钮,它以秒、分等人类尺度来计算时间。传统上,主板上有一个小电池,它可以让芯片记住时间,甚至在计算机其余部分断电的情况下继续计算时间


今天,许多计算机使用诸如的服务定期查询集中的高精度时钟,以设置当前时间。这样,即使电池被取下(或只是出了故障),计算机仍能知道它是什么时间和日期,并能根据需要随时更新(以纠正实时芯片的计时错误)。

购买这些书籍中的任何一本。他们会告诉你日期库是如何工作的。

日期/时间通常以自某个日期起的时间来存储。例如,自0001年1月1日以来的滴答声(100纳秒间隔)。它通常也是参照UTC存储的。操作系统、数据库、框架、应用程序等中的底层方法可以将它们转换为更可用的表示形式。回到过去,系统会将日期、日、月、年等的组成部分存储为数据结构的一部分,但我们从Y2K的混乱中吸取了教训,这可能不是最好的方法。

除了实时时钟,日期计算主要是一个软件库函数

日期是相当不规则的,因此在幕后混合使用了近似、更正和查找表


日期的表示形式也可能有所不同,通常使用一些(任意)起始日期。天文学家也使用的一个通用系统是(不要与之混淆)。日期可以存储为开始后的秒数或开始后的天数(后者通常是浮点)。以下是。

数据解析、计算、创建等需要大量复杂的代码

例如,在Java中,日期是通过计算、修改、存储等的,尤其是典型的。(您可以自己查看源代码。)


简而言之,我从快速阅读源代码中得到的信息是:日期处理是非常重要的,您不想自己尝试。如果可能的话,找一个好的图书馆,否则你几乎肯定会找到。

大多数回复都与如何获得当前日期有关。i、 e.来自系统时钟等

如果您想知道它是如何存储和使用的,有许多不同的实现,这取决于系统

我认为一个常见的方法是在T-sql中使用64位有符号整数。1970年1月1日是0,所以负数是1970年之前的数字,而正数则是从每增加一秒的100分之一开始的(认为这是需要检查的第100分之一)

为什么1970年1月1日你可能会问,这是因为公历的周期是400年。1970年1月1日为截止当前日期的周期开始日期

这是因为“每一个能被四整除的年份都是闰年,除了能被100整除的年份外;能被400整除的百年仍然是闰年。例如,1900年不是闰年,2000年是闰年。”使它变得非常复杂我相信400年的周期与一周中重复的几天相吻合,但需要检查。基本上这很复杂


在内部,编写datetime库来解释所有这些变化是非常困难的,例如闰年,事实上没有零年。。。。。更不用说UTC、GMT和UT1时间了。

在调试客户端问题时,我们有机会了解SQL如何存储日期时间。。。很有趣,也很有道理