Какой самый «идиоматический» способ получить Unix-секунды от PowerShell? - PullRequest
0 голосов
/ 30 апреля 2018

Я привык использовать .NET Framework DateTimeOffset для получения Unix-секунд.

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

Но я пишу сценарий PowerShell и подумал, что постараюсь быть как можно более "идиоматичным". Казалось, что Get-Date добьется цели, но результаты отличаются.

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

Кажется, что Get-Date является синонимом DateTime, по умолчанию используется мой местный часовой пояс. Единственный способ получить дату UTC из Get-Date - это другой вызов метода .NET.

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

А теперь, чтобы получить Unix-секунды, я снова могу пайпить?

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

Это ужасно много труб, потому что я думал, что это будет простое выражение ... какие-нибудь другие идеи?

1 Ответ

0 голосов
/ 02 мая 2018

ОК, поэтому, пока Get-Date не станет осведомленным о часовом поясе или мы не получим новый командлет ... кажется, что мы должны использовать метод ToUniversalTime. Это особенно важно учитывать, потому что эта ошибка , по-видимому, влияет только на форматирование Unix-секунд, если вы не не преобразовали в универсальное время (исправление объединено , но кто знает, что это за релиз).

Итак, лучший , который мы можем сделать, это, вероятно, что-то вроде этого:

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