【问题标题】:How to convert powershell UTC datetime object to EST如何将 powershell UTC 日期时间对象转换为 EST
【发布时间】:2020-03-07 05:39:30
【问题描述】:

我收到了日期时间字符串,格式如下:

2017-08-03T12:30:00.000Z

我需要能够将这些转换为 EST。我尝试过的每个函数都会引发一个或另一个错误,通常是:

"String was not recognized as a valid DateTime."

我尝试了以下变体:

$time = '2017-08-03T12:30:00.000Z'
[datetime]$datetime = $time 
$culture = [Globalization.CultureInfo]::InvariantCulture
[DateTime]::ParseExact($datetime, 'MM-dd-yyyy HH:mm:ss', $culture)

我认为这与我引用的日期时间字符串如何具有 **T** 和 UTC 时间有关,但不知道该怎么做。也许我应该解析时间,转换它,然后重新附加到字符串的第一部分,日期,并将它们组合在一起以获得最终输出?似乎工作量太大,而且解决方案可能会导致将来出现潜在错误。

【问题讨论】:

  • 您需要将 ParseExact 更改为变量中的日期时间格式。 [DateTime]::ParseExact($datetime, 'MM/dd/yyyy HH:mm:ss', $culture) 注意“/”而不是“-”,这不会引发任何错误。这就是你要找的吗?

标签: powershell date datetime timezone utc


【解决方案1】:

您应该能够简单地通过强制转换将 Zulu 时间字符串转换为 DateTime 值。但是,结果值将是本地时间,因此您应该将其转换回 UTC 以进行进一步计算:

$timestamp = '2017-08-03T12:30:00.000Z'
$datetime  = ([DateTime]$timestamp).ToUniversalTime()

然后您可以使用TimeZoneInfo 类将UTC时间戳转换为所需的时区:

[TimeZoneInfo]::ConvertTimeBySystemTimeZoneId($datetime, 'Eastern Standard Time')

使用[TimeZoneInfo]::GetSystemTimeZones() | Select-Object Id, DisplayName 获取已识别时区的列表。

【讨论】:

    【解决方案2】:

    尝试使用[System.TimeZoneInfo]类的静态ConvertTimeBySystemTimeZoneId()方法:

    $time = '2017-08-03T12:30:00.000Z'
    $result = [System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId((Get-Date -Date $time), 'Eastern Standard Time')
    

    返回的 $result 是 [DateTime]

    顺便说一句,如果您需要将其转换回来,方法如下:

    Get-Date -Date $result -Format FileDateTimeUniversal
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-01-24
      • 2021-10-27
      • 2023-04-07
      • 2018-05-11
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多