如何使用 PowerShell 将 UTC 转换为 EST
Posted
技术标签:
【中文标题】如何使用 PowerShell 将 UTC 转换为 EST【英文标题】:How can I convert UTC to EST using PowerShell 【发布时间】:2022-01-09 05:08:30 【问题描述】:在我的 csv 文件中,我有日期和时间列,但它是 UTC 时间,所以我只是想知道如何使用 PowerShell 将其转换为 EST 时间(12 小时或 24 小时格式)。我一直在谷歌上搜索如何做到这一点,但我还没有看到 Excel 列的任何解决方案。
function Convert-JSONColumn
Write-Host "Start parsing Json Column"
$downloadFile = Import-Csv "C:\AuditLogSearch\Downloaded-Audit-Log-Records.csv"
$modifiedFile = "C:\AuditLogSearch\Modified-Audit-Log-Records.csv"
$downloadFile | ForEach-Object
$jSON = $_.AuditData | ConvertFrom-Json
$epdata = ""
foreach ($ep in $jSON.extendedProperties)
$epdata += $ep.Name + " : " + $ep.Value + "`n"
$paramdata = ""
foreach ($param in $jSON.Parameters)
$paramdata += $param.Name + " : " + $param.Value + "`n"
New-Object PsObject -Property @
RecordType = $_.RecordType
UserIds = $_.UserIds
Operations = $_.Operations
CreationTime = $jSON.CreationTime
Operation = $jSON.Operation
ObjectId = $jSON.ObjectId
| Select-object -Property @(
@Name = 'User'; Expression = 'UserId'
@Name = 'Date & Time'; Expression = 'CreationTime'
@Name = 'Type of Action'; Expression = 'Operation'
@Name = "Criteria"; Expression = "RecordType"
@Name = "Item Search"; Expression = "ObjectId"
@Name = "Result Status"; Expression = "ResultStatus"
) | Export-Csv $modifiedFile -NoTypeInformation
这是 UTC 时间现在的样子。
2021-12-01T18:23:21
2021-12-01T18:23:21
2021-12-01T18:23:21
【问题讨论】:
为什么你认为 ISO 标准日期时间字符串是 utc?缺少时区段似乎表明......但它并不需要。 ///// PS - 请不要发布数据图像。我不需要输入就无法使用它......而且我不会做需要的工作,因为你是选择让它“需要”的人。 @Lee_Dailey 嗨.. 感谢您的反馈,我更新了我的帖子。谢谢 【参考方案1】:使用TimeZoneInfo.ConvertTime()
:
# sample UTC datetime value
$dt = [datetime]::UtcNow
# define target time zone
$targettz = [System.TimeZoneInfo]::FindSystemTimeZoneById('Eastern Standard Time')
# convert to target timezone
[System.TimeZoneInfo]::ConvertTime($dt, $targettz)
这适用于本地化和通用 DateTime 值。
如果您希望它在遇到本地化值时失败,请使用ConvertTimeFromUtc()
:
# this will still work
$dt = [datetime]::UtcNow
[System.TimeZoneInfo]::ConvertTimeFromUtc($dt, $targettz)
# this will fail
$dt = [datetime]::Now
[System.TimeZoneInfo]::ConvertTimeFromUtc($dt, $targettz)
【讨论】:
【参考方案2】:鉴于 $json.CreationTime 中的 UTC 时间,您可以将其解析为 DateTime
,然后转换为:
[System.TimeZoneInfo]::ConvertTimeBySystemTimeZoneId([datetime]::Parse($json.CreationTime, $Null, [System.Globalization.DateTimeStyles]::AssumeUniversal), 'Eastern Standard Time').ToString('yyyy-MM-ddTHH:mm:ss')
【讨论】:
以上是关于如何使用 PowerShell 将 UTC 转换为 EST的主要内容,如果未能解决你的问题,请参考以下文章