我编写了一个简单的函数来将任何 UTC 时间转换为当前英国时间(取决于当前季节是否应用夏令时,结果是相同的 UTC 或 UTC + 1):
function Convert-UTCToUKTime
{
[CmdletBinding()]
param
(
[Parameter(Mandatory = $true)] $UTCTime
)
$UKTime = (Get-Date -Date $UTCTime)
if ($UKTime.IsDaylightSavingTime() -eq $true)
{
$UKTime = $UKTime.AddHours(1)
}
return $UKTime
}
我也在不同的函数中使用它来获取当前的英国时间,它工作得很好:
function Get-UKTime
{
[CmdletBinding()]
[OutputType([System.String])]
param
(
[Parameter(Mandatory = $true)] [String] $Format
)
$UKTime = Convert-UTCToUKTime -Time ((Get-Date).ToUniversalTime())
return $UKTime.ToString($Format)
}
但是,当我尝试将文件创建时间(当然是 UTC)传递给转换函数时,它无法识别夏令时,因此返回一小时后的英国时间值(我试图传递完全相同的时间通过使用Get-Date
- 没有问题):
[System.IO.FileInfo] $FileInfo = $FullFileName
$FileCreatedTime = Convert-UTCToUKTime -UTCTime (($FileInfo.CreationTimeUTC)
我找到了帮助我按预期工作的修复程序(通过在作为参数传递之前将DateTime
类型转换为):String
$FileCreatedTime = Convert-UTCToUKTime -UTCTime (($FileInfo.CreationTimeUTC).ToString("yyyy/MM/dd hh:mm:ss"))
但是,我不确定为什么会这样。Get-Date
使用它和传递文件创建时间作为参数之间有什么区别,因为它们都具有相同的DateTime
类型?
任何解释将不胜感激。