M语言中如何将当前日期时间转换为秒级Epoch/Unix时间?
在M语言(Power Query)中转换当前时间为秒级Unix时间戳
嘿,这个问题我之前也碰到过!M语言确实没有直接返回秒级Epoch时间的内置函数,但咱们可以照着你C#里的思路手动实现,逻辑完全一致,很容易搞定。
核心思路就是计算当前UTC时间和Unix时间的起始点(1970年1月1日0点0分0秒 UTC)之间的时间差,然后取这个时间差的总秒数。
完整实现代码
let // 获取当前的UTC时间(一定要用UTC,Unix时间是基于UTC的) CurrentUtcTime = DateTime.UtcNow(), // 定义Unix Epoch的起始时间(必须是UTC时区的1970-01-01 00:00:00) EpochStartTime = #datetime(1970, 1, 1, 0, 0, 0), // 计算两个时间的时间差,并转换为总秒数 EpochSeconds = Duration.TotalSeconds(CurrentUtcTime - EpochStartTime) in EpochSeconds
补充说明
- 为什么要用UTC时间?因为Unix时间戳的定义就是从1970-01-01 UTC开始的秒数,如果你用本地时间(
DateTime.LocalNow())计算,结果会和标准Unix时间有偏差,所以一定要用UTC时间。 - 如果需要整数形式的秒数(不带小数),可以用
Number.Round()或者Number.IntegerDivide()来处理:EpochSecondsInteger = Number.Round(EpochSeconds, 0)
这个实现和你给出的C#代码逻辑完全匹配,只是换成了M语言的语法而已,亲测有效哦!
内容的提问来源于stack exchange,提问作者mehwish
相关产品推荐
相关产品推荐

