2009-12-07 54 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)