Unix时间戳转换

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

2 Replies to “Unix时间戳转换”

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注