如何在 nushell 中获取当前时间戳减去 30 分钟?

How can I get the current timestamp minus 30 minutes in nushell?

提问人:Howins 提问时间:9/22/2023 更新时间:9/22/2023 访问量:68

问:

我在 Nushell 中搜索了替代品,但我没有找到任何东西。 如何获取当前日期时间减去 N 分钟?喜欢这个date -d$((date now) - 30 minutes)

nushell的

评论


答:

2赞 pmf 9/22/2023 #1

您可以从提供的当前日期中减去持续时间(例如)(您也可以添加具有相同效果的负持续时间):30mindate now

(date now) - 30min
# or
(date now) + -30min

因此,如果您的输入是表示分钟数的整数,只需将其附加为字符串,然后在减法/加法之前使用它进行转换,如上所述:"min"into duration

30 | (date now) - ($"($in)min" | into duration)
# or
-30 | (date now) + ($"($in)min" | into duration)

为了完整起见,虽然不建议这样做,但你也可以通过将当前日期格式化为以秒为单位的 UNIX 时间戳来走完整的算术路线,然后减去/添加也转换为秒的分钟数(即乘以 60),并将其进一步转换为纳秒(即再次乘以 10 亿),因为这是接受的数字输入。将它与 (或) 选项一起使用以重新包含您的本地时区(该时区因 UNIX 时间戳而丢失)。format date "%s"into datetime--timezone LOCAL-z l

30 | (((date now | format date "%s") | into int) - $in * 60) * 1_000_000_000 | into datetime -z l
# or
-30 | (((date now | format date "%s") | into int) + $in * 60) * 1_000_000_000 | into datetime -z l

为了获得超精确度,您甚至可以使用格式字符串直接以纳秒为单位提取 UNIX 时间戳,然后减去/添加同样转换为纳秒的分钟数:%s%f

30 | ((date now | format date "%s%f") | into int) - $in * 60_000_000_000 | into datetime -z l
# or
-30 | ((date now | format date "%s%f") | into int) + $in * 60_000_000_000 | into datetime -z l

评论

1赞 Marijn 9/22/2023
或者:(date now) - (30min)
0赞 Howins 9/22/2023
非常感谢,没想到这么简单!