我可以使用下面的日期追加到文本:使用UFormat獲得UNIX時間
"Foo {0:G} Foo" -f (date) #returns "Foo 2009-12-07 15:34:16 Foo"
但我想以Unix格式的時間。 我可以通過date -UFormat %s
得到它,但我可以使用相同的語法嗎?
當我使用-UFormat %s
我得到1260199855,65625,我該如何去除小數?
我可以使用下面的日期追加到文本:使用UFormat獲得UNIX時間
"Foo {0:G} Foo" -f (date) #returns "Foo 2009-12-07 15:34:16 Foo"
但我想以Unix格式的時間。 我可以通過date -UFormat %s
得到它,但我可以使用相同的語法嗎?
當我使用-UFormat %s
我得到1260199855,65625,我該如何去除小數?
只投結果爲int,像這樣:
PS> [int][double]::Parse((Get-Date -UFormat %s))
1260172909
PS> "Foo {0:G} Foo" -f [int][double]::Parse((Get-Date -UFormat %s))
Foo 1260172997 Foo
使用Parse方法意味着字符串被解析「文化意識」使得相應的小數分隔符被認定爲當前文化。如果您直接投射,PowerShell會使用不變的文化,這會對任何文化造成問題,因爲十進制sep字符不是句號。
我的解決辦法:
(Get-Date -UFormat %s) -Replace("[,\.]\d*", "")
我這樣做,圍捕
[System.Math]::Round((date -UFormat %s),0)
一個明顯的解決方案,當你看到它:-) – magol 2014-11-25 19:05:11
這裏是我如何做到這一點:
$DateTime = (Get-Date).ToUniversalTime()
$UnixTimeStamp = [System.Math]::Truncate((Get-Date -Date $DateTime -UFormat %s))
這是唯一的答案,計算實際的Unix時間戳(自1970-01-01 00:00:00 UTC UTC **以來的秒)。 請注意,由於.NET 4.6有一個專門的方法:'([DateTimeOffset](Get-Date))。ToUnixTimeSeconds()' – argonym 2017-11-14 15:00:44
[int](Get-Date -UFormat %s -Millisecond 0)
如果我使用[INT](獲取-date -UFormat%s),我得到 無法將值「123456789,12345」轉換爲鍵入「System .Int32" 。錯誤:「輸入字符串格式不正確。」 – magol 2009-12-08 09:41:36
嗯,不知道這是一個本地化的錯誤? – 2009-12-08 14:58:40
顯然,當從字符串強制轉換爲數字時,PowerShell使用不變文化,這意味着只有一個句點被識別爲小數點分隔符。我已經更新了可以容納的答案。 – 2009-12-09 02:18:56