为什么编程语言中日期能够实现加减法

简介:

一.概要

  • 日期类型在编程语言中内部是通过number 存储的

  • 日期类型加减实际是数字的加减

  • 多数编程语言的日期开始时间是 1970-01-01 00:00:00

二. 为什么多数编程语言的开始日期是从1970-01-01 00:00:00 开始

 通过查阅资料一般存在两种解释

  •  多数编程语言起源于UNIXUNIX系统的时间纪元是1970-01-01 00:00:00,即所为的UNIX时间戳。

  • 最初计算机都是32位操作系统,时间需要通过number存储,32位能表示最大数字为2147483647。一年365天的总秒数位  31536000 ,两者相除得68.1.所以如果从0000-00-00 00:00:00 算起的话,计算机到19011213日就溢出了。而选用1970年的,可以支持到2038年。

  这两种解释,我个人比较认可UNIX时间纪元的说法,毕竟UNIX出现在这一年,作为UNIX的研发者需要纪念这个重要的日子。

三.采用的UNIX时间纪元的开发语言

 1.JAVA 

 文档地址:http://docs.oracle.com/javase/8/docs/api/java/util/Date.html#Date

   

 不过对于中国开发者,通过 System.Out.Println(new Date(0)); ,控制台打印的时间是1970-01-01 08:00:00 ,这个是因为中国处于东8区的缘由。对于程序内部存储值无影响。

 2.JavaScript

文档地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date

   

3.Python

文档地址: https://docs.python.org/3/library/datetime.html#date-objects

 

4.ORACLE

文档地址:http://docs.oracle.com/cd/E11882_01/appdev.112/e13995/oracle/sql/TIMESTAMP.html

   

 5.PHP

文档地址:http://php.net/manual/en/function.time.php

   

四 .没采用UNIX时间戳的语言

1.基于 .Net 类库的语言

 默认采用int64位来表示时间戳,并且精确到100ns,开始日期点为0001-01-01 00:00:00.000。

文档地址:https://msdn.microsoft.com/zh-cn/library/z2xf7zzk(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

   

2.VBScript 

文档地址:https://www.microsoft.com/china/vbscript/vbstutor/vbsdatatype.htm

这个开始时间很奇怪,从API来看,开始时间是从0100-01-01 00:00:00

不过从代码测试来看,开始时间是从1899-12-30 0 :00:00 开始

五.有关EXCEL 日期系统

在office excel中存在两种日期格式1900 和 1904,即日期的开始点为 1900-01-01 00:00:00 和 1904-01-01 00:00:00 。一般Excel 默认是按照1900的日期系统,且认为1900年为润年,1900年2月分 按照29天计算。Excel中存储值得起始日期是从1开始的,即,1900-01-01 00:00:00 在excel中对应的存储值为1 (天)。


作者:_herbert

来源:51CTO

相关文章
|
6月前
|
程序员 C语言
【C语言基础考研向】06运算符与表达式
本文介绍了C语言中的运算符分类、算术运算符及表达式、关系运算符与表达式以及运算符优先级等内容。首先概述了13种运算符类型,接着详细说明了算术运算符的优先级与使用规则,以及关系运算符和表达式的真假值表示,并给出了C语言运算符优先级表。最后附有课后习题帮助巩固理解。
168 10
|
9月前
|
C语言
C语言学习记录——鹏哥字符分类函数、字符转换函数
C语言学习记录——鹏哥字符分类函数、字符转换函数
866 2
|
10月前
|
存储 Unix Linux
C语言时间日期函数的研究与应用
C语言时间日期函数的研究与应用
103 1
|
存储 C语言
如何在C语言中进行日期和时间处理
日期和时间处理在许多软件和应用程序中都是非常重要的功能。无论是计算两个日期之间的天数,还是计算某个日期是星期几,C语言提供了丰富的库函数和功能来满足这些需求。本文将介绍如何在C语言中进行日期和时间处理
271 0
|
Java 编译器 Linux
学C的第一天(初识C语言、VS创建C语言程序、数据类型简单了解、简单了解变量)(1)
(不要问为啥写水平线中间这些话,这是某个秘密任务哦。) a.已经大二下学期啦,心态感觉也要崩啦,学校教的都不精,得赶紧深入学习一门语言,所以,就决定是你啦,C语言!
107 0
|
C语言 C++
学C的第一天(初识C语言、VS创建C语言程序、数据类型简单了解、简单了解变量)(2)
3*数据类型: 为什么要编程?--> 为了写代码,解决问题 --> (例如:)解决网上购物的问题: 网上商城: 商品:~ 名字:~ 价格:20 25.5 --> 20 --> 整数 --> 整型 --> int --> 25.5 --> 小数 --> 浮点型 --> float / double
104 0
|
存储 算法 C语言
03【C语言 & 趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。
03【C语言 & 趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。
03【C语言 & 趣味算法】(值得品味的一道题)打鱼还是晒网?结构体的简单应用。函数的应用。判断闰年的应用。求指定日期距1990年1月1日的天数。
|
C语言
c语言学习第一天
c语言学习第一天
62 0
|
C语言
C语言中获得本地日期
C语言中获得本地日期
97 0
|
C语言
C语言编写程序计算某年某月某日是该年中的第几天(3种方法)
C语言编写程序计算某年某月某日是该年中的第几天 编写程序计算某年某月某日是该年中的第几天 例如输入fool girl 的出生日期1999-5-27 输出147
1360 0
C语言编写程序计算某年某月某日是该年中的第几天(3种方法)