从 PowerShell 获取 Unix 秒的最 "idiomatic" 方法是什么?

What is the most "idiomatic" way to get Unix seconds from PowerShell?

我习惯使用 .NET Framework DateTimeOffset 来获得 Unix 秒数。

PS> ([datetimeoffset] '2020-01-01').ToUnixTimeSeconds()
1577854800

但是,我正在编写一个 PowerShell 脚本,我想我会尽可能做到 "idiomatic"。看起来 Get-Date 可以解决问题,但结果却不同。

PS> Get-Date -Date '2020-01-01' -UFormat %s
1577836800

似乎 Get-DateDateTime 的同义词,默认使用我当地的时区。我可以从 Get-Date 获取 UTC 日期的唯一方法是另一个 .NET 方法调用。

PS> (Get-Date -Date '2020-01-01').ToUniversalTime()

现在,为了获得 Unix 秒数,我可以再次使用管道吗?

PS> (Get-Date -Date '2020-01-01').ToUniversalTime() | Get-Date -UFormat %s

对于我认为简单的表达方式来说,这是一个非常多的管道......还有其他想法吗?

好的,所以,在 Get-Date 变得可识别时区或我们获得新的 cmdlet 之前……看来我们必须使用 ToUniversalTime 方法。考虑这一点尤为重要,因为 this bug seems to only effect formatting Unix seconds if you haven't converted to Universal time (a fix is merged,但谁知道那是什么版本)。

所以,我们能做的最好的可能是这样的:

PS> Get-Date -Date (Get-Date -Date '2020-01-01').ToUniversalTime() -UFormat %s