zoukankan      html  css  js  c++  java
  • 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系统中的日期数据。

    datetime.zip 1,000 bytes
    按照Excel中的用数字表示日期的方法,在字符串形式和数字形式的日期之间互相转化,比Matlab自带的datestr和datenum要快5到10倍。

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

    % 读入日期数据到matlab中 select CONVERT(float, mydate) + 693962 % 读入日期数据到Excel中 select CONVERT(float, mydate) + 2
  • 相关阅读:
    Codeforces461E Appleman and a Game 做题心得
    关于贪心问题的处理
    各种容斥 笔记
    博弈论 笔记
    家庭多个路由器组网方案(AP+AC)
    21.06.06 训练赛
    Redirect...
    Web Api实践系列(三)route特性使用
    《Red Tuner》隐私政策
    前缀和-1915. 最美子字符串的数目
  • 原文地址:https://www.cnblogs.com/shihao/p/2323652.html
Copyright © 2011-2022 走看看