2009-12-07 55 views
8

我可以使用下面的日期追加到文本:使用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,我該如何去除小數?

回答

14

只投結果爲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字符不是句號。

+0

如果我使用[INT](獲取-date -UFormat%s),我得到 無法將值「123456789,12345」轉換爲鍵入「System .Int32" 。錯誤:「輸入字符串格式不正確。」 – magol 2009-12-08 09:41:36

+0

嗯,不知道這是一個本地化的錯誤? – 2009-12-08 14:58:40

+1

顯然,當從字符串強制轉換爲數字時,PowerShell使用不變文化,這意味着只有一個句點被識別爲小數點分隔符。我已經更新了可以容納的答案。 – 2009-12-09 02:18:56

3

我的解決辦法:

(Get-Date -UFormat %s) -Replace("[,\.]\d*", "") 
3

我這樣做,圍捕

[System.Math]::Round((date -UFormat %s),0) 
+0

一個明顯的解決方案,當你看到它:-) – magol 2014-11-25 19:05:11

4

這裏是我如何做到這一點:

$DateTime = (Get-Date).ToUniversalTime() 
$UnixTimeStamp = [System.Math]::Truncate((Get-Date -Date $DateTime -UFormat %s)) 
+0

這是唯一的答案,計算實際的Unix時間戳(自1970-01-01 00:00:00 UTC UTC **以來的秒)。 請注意,由於.NET 4.6有一個專門的方法:'([DateTimeOffset](Get-Date))。ToUnixTimeSeconds()' – argonym 2017-11-14 15:00:44

1
[int](Get-Date -UFormat %s -Millisecond 0)