【问题标题】:PowerShell date format not behavingPowerShell 日期格式不正常
【发布时间】:2017-10-23 07:45:38
【问题描述】:

我被难住了。 :)

我的电脑安装了 PowerShell 5.1。在另一台计算机(相同语言)5.0 上,它按预期工作。 (使用 Get-Culture 检查;我的语言环境是 nb-NO(挪威))

考虑一下:

Get-Date

返回

tirsdag 23. mai 2017 13.13.18

所以我这样做

Get-Date -Format "H-m-s"

按预期返回

13-13-18

然后我会这样做

Get-Date -Format "H:m:s"

你认为它会返回

13:13:18

对吗? (在 PS5.0 上可以!)不!我明白了:

13.13.18

只有这样,输出才是我想要的:

Get-Date -Format "H\:m\:s"
13:13:18

有人能解释一下这是为什么吗?当我想格式化日期时间兼容的字符串以在 SQL Server 中使用时,我“偶然”发现了它。

【问题讨论】:

  • 我会简单地使用Get-Date -Format "T"
  • 对不起,这并不能解决任何问题,它仍然为我返回 13.13.18。
  • 好吧,并不是每个人都知道从 nb-NO 开始的时间分隔符,所以在我上面的命令之前加上 @Mathias 提示 [CultureInfo]::CurrentCulture.DateTimeFormat.TimeSeparator = ":"

标签: string powershell datetime


【解决方案1】:

这是因为底层的DateTime 格式化函数看到了: 并将其视为culture-dependent "time separator"

在挪威语 (no-NO) 中,默认时间分隔符是 .。您可以使用以下方法进行检查(假设 no-NO 是当前文化):

PS C:\> [CultureInfo]::CurrentCulture.DateTimeFormat.TimeSeparator
.

您也可以通过插入文字 : 和您已经找到的转义序列 \: 来覆盖它,或者您可以全局覆盖它(在当前进程/应用程序域的生命周期内):

PS C:\> [CultureInfo]::CurrentCulture.DateTimeFormat.TimeSeparator = ":"
PS C:\> Get-Date -Format "H:m:s"
13:13:18

【讨论】:

  • 谢谢!文字“:”不适合我,但使用转义序列可以。另外,为什么这在 PS 5.0 之后发生了变化?
  • 抱歉,不清楚 - 如果您想要在结果字符串中使用文字 :,您 需要 使用转义序列。 AFAIK,这不是因为 PowerShell 中的任何更改,而是因为 .NET 3.5 (CLR 2.0) 和 .NET 4.5 (CLR 4.0) 之间的底层 DateTime 格式化实现不同,不知道为什么
猜你喜欢
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2020-05-31
  • 1970-01-01
  • 2018-01-21
相关资源
最近更新 更多