【问题标题】:Windows ISO 8601 timestampWindows ISO 8601 时间戳
【发布时间】:2023-04-11 04:42:02
【问题描述】:

我需要将 Windows PowerShell 中的日期转换为 ISO 8601 格式。

在 Linux/Unix 中没有问题

TZ=0 date -d "<random-format>" +%Y-%m-%dT%H:%M:%S.000Z

现在我需要在 Windows PowerShell 中执行相同的操作。 Windows 上的输出格式为

Wednesday, 19. July 2017 01:06:13

我该怎么做?

【问题讨论】:

标签: windows powershell timestamp iso8601


【解决方案1】:

PowerShell 的 Get-Date 支持标准 .NET 时间格式。 o round-trip 格式符合 ISO 8601。就像这样,

Get-Date -Format "o"

2017-08-15T12:10:34.4443084+03:00

【讨论】:

  • 尽管可能存在可移植性问题,但我喜欢这个解决方案,因为它很简单,您基本上可以记住它,以便快速编写脚本。
【解决方案2】:

Get-Date 支持带有-UFormat 参数的Unix 格式化字符串。你可以重复使用它:

Get-Date (Get-Date).ToUniversalTime() -UFormat '+%Y-%m-%dT%H:%M:%S.000Z'

【讨论】:

  • 这应该是正确的答案,因为这个问题的框架表明便携性很重要。然而,Powershell 中的实现是不完整的,所以像%F 这样的格式化元素不起作用,尽管%T 可以;也没有任何明显的方法可以像现在的 Unix date 那样简单地指定 UTC 时间。
  • "%F" 适用于 PowerShell 7:get-date -UFormat "%F" 产生预期的格式。
  • 这将为您提供本地时区的时间戳! “Z”后缀可能不正确。
  • 这是不正确的,因为我刚刚都做了Get-Date -Format "o"Get-Date -UFormat '+%Y-%m-%dT%H:%M:%S.000Z' 并且得到了相同的时间,而我住在UTC+3。
  • @MelvinR​​oest 在 Windows PowerShell 或更新版本中?我刚刚在 UTC+2 的机器上尝试了 WPS 5.1,它吐出当地时间,而不是通用的(答案已更新)
【解决方案3】:

以下内容适用于 Windows/OS X 上的 Windows PowerShell 5.1 和 PowerShell 7.0:

 (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffK")
 
 2020-12-01T22:31:41.402Z

如果您不想要毫秒,那么格式字符串将是 "yyyy-MM-ddTHH:mm:ss.000K"

【讨论】:

    猜你喜欢
    • 2013-03-11
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2021-10-24
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多