Matlab、Excel、SQL中的日期的数字序列形式

作者:, 发表于

我贡献的源代码

查看该系列所有文章

如果一个日期(或者时间),如果用字符串,比如"2010-10-04"的形式,各个系统都没有什么区别。在某些时候,将日期用数字表示,将大大增加对日期查找、比较的效率。而如果用数字来表示日期,在不同的系统之间差别就大了。

比如2010年10月4日,在Excel中为40455,在Matlab中为734415,在SQL里为40453。

事实上,当一个日期被转化为数字时,

  • Matlab中为它到0000-01-00的天数,
  • SQL中为它到1900-01-01的天数。
  • Excel的日期是很奇怪的东西,它和SQL都是微软出品,按照官方文件的说法,它们的算法是一样的。而事实上,它们相差了两天,原因在于首先,Excel中日期对应的数为它到1900-01-00的天数;其次,Excel中日期序列多了一个不存在的日期 ’1900-02-29',它是Excel早期设计中由于为了保持与Lotus 1-2-3兼容性特意这么设计的(而最开始Lotus这么设计则是为了编程简单)。

故对于一般的日期(1900-03-01以后)有以下关系式:

Matlab_datetime = Excel_datetime + 693960;
SQL_datetime = Excel_datetime - 2;
Matlab_datetime = SQL_datetime + 693962;

在Matlab和Excel之间交换日期数据时,可以直接用上面的公式,也可以考虑用下面的mdatestr代替datestr,它会自动分辨是Matlab系统中的日期数据还是Excel系统中的日期数据。

同时,在SQL读取日期数据的时候需作如下处理:

% 读入日期数据到matlab中
select CONVERT(float, mydate) + 693962
% 读入日期数据到Excel中
select CONVERT(float, mydate) + 2

Q.E.D.


上一篇:批量修改图片大小的Matlab脚本2010年10月1日
现在相机的像素实在是太高了,上次去泰山玩,朋友的1200万像素的D90照出来的照片分辨率高达4288×2848,即使转为jpg格式,每张都在5M以上。而现在电脑

下一篇:Matlab中使用ADODB访问数据库2010年10月9日
Matlab的database工具箱只支持ODBC数据库连接,在使用之前需要先设置ODBC数据源。之前在Excel里用的是ADODB,使用ADODB的好处是无需设置ODBC源,似乎效率也


  • 支持使用微薄、微信和QQ的账户登陆进行评论。由各自网站直接认证,不会泄露你的密码。
  • 登陆后可选择分享评论到所绑定的社交网络,如微薄、人人和QQ空间。
  • 评论提交后无法修改。如需修改,请删除原评论再重新提交。
  • 评论支持LaTeX代码,行内公式请用\(a+b=c\),行间公式请用\[a+b=c\]。公式只支持英文字符。