时间戳:通俗来讲是指一个能表示一份数据在某个特定时间点已经存在的、 完整的、 可验证的数据。
最常见,可读性最好的时间戳为字符串型时间戳,比如:
2018年05月16日 13点26分53秒
2018/05/16 13:26:53
但实际实际使用过程中,字符串时间戳存在较大的弊端,比如存储空间较大至少需要15个以上的字节,日期前后比较困难(比如A日期在B日期之前还是之后),计算相差时间较为困难(A、B日期之间相差多少秒)。基于以上,程序员通常使用浮点型数据表示时间戳(float32或float64),但是在不同软件中浮点型时间戳的计算并不相同,也就需要知道不同软件之间时间戳的相互转化。
这里以UTC时间为例,也就是我们的Windows系统时间是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。也即1970年01月01日00时00分00秒的浮点时间戳为00000.000秒。
从上面我们就可以看出浮点数字时间戳需要注意3点:
1、起始时间,即xxxx年xx月xx日 xx时xx分xx秒为0.000或1.0000等;
2、单位,即浮点数字中的1单表是1秒还是1小时还是1天;
3、时区,即全球24个时区,相邻时区相差1小时。
对于Python - Excel – Matlab 的浮点型时间戳对于以上3点我们做以下统计结果(其中Excel时间即代表Windows系统时间):
1、起始时间
Python:起始时间为1970-01-01 08:00:00,对应浮点时间为0.0
Excel:起始时间为1900-01-01 00:00:00,对应浮点时间为1.0000
Matlab:起始时间为0000-01-00 00:00:00,对应浮点时间为0.0000
2、单位
Python:1代表1秒
Excel:1代表1天
Matlab:1代表1天
3、时区
从第1、2点来看,仅Python的浮点时间戳和当地时区有关,北京时区为 东+8区,因此开始的0.00时间为08:00:00,而Excel和Matlab均使用0时区。
Python - Excel - Matlab 时间戳的相互转换
由于个人经常使用Python时间戳,因此在这里只给出Python – Excel和Python – Matlab时间戳的相互转换,其他转换可以同理推出。
Excel 和 Python的起始时间相差70年又8小时,且单位比例为 1天=86400秒,故:
PyTime = (ExcelTime - 25569.3333333)*86400
ExcelTime = PyTime /86400 + 25569.3333333
Matlab 和 Python的起始时间相差1970年又8小时,且单位比例为 1天=86400秒,故:
MatTime = PyTime /86400 + 719529.333333333
PyTime = (MatTime - 719529.333333333)*86400
验证:
以2018/05/16 13:26:53 时间为例:
Python 时间戳为:1526448413.0
通过计算:
ExcelTime = 43236.560336
MatTime = 737196.5603356478
由于转换存在约等数据,故精度可以达到秒级相同,毫秒级可能存在误差。