从 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-Date
是 DateTime
的同义词,默认使用我当地的时区。我可以从 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
我习惯使用 .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-Date
是 DateTime
的同义词,默认使用我当地的时区。我可以从 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