Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。Unix时间戳不仅被使用在Unix系统、类Unix系统中,也在许多其他操作系统中被广泛采用。
有些从系统导出或网抓的数据,时间为时间戳格式,Power Query并没有直接的函数对其转换,但可以通过自定义函数实现。
let timestamp = (x)=>#datetime(1970,1,1,8,0,0)+#duration(0,0,0,x), time = timestamp(1502374503) in time
公式非常简单,duration表示持续时间,直接加上起始的北京时间。
而有些语言的时间戳是13位的,比10位的精度更高一些,高在后3位。但是精不精度和我们没什么关系,我们不需要,把后三位去掉即可。
let timestamp = (x)=>#datetime(1970,1,1,8,0,0)+#duration(0,0,0,Number.IntegerDivide(x/1000,1)), time = timestamp(1502353621929) in time
如果是反过来,要把时间转换为时间戳呢?
那就先用时间减去初始时间,然后转换为总秒数,结果可能为小数,最后再取个整。以求当前时间的时间戳为例:
let time = (x)=> Number.IntegerDivide(Duration.TotalSeconds(x-#datetime(1970,1,1,8,0,0)),1), timestamp = time(DateTime.LocalNow()) in timestamp
这个好~非常有价值。
发现新大陆