Я написал простую функцию для преобразования любого времени UTC в текущее время Великобритании (в зависимости от того, применяется ли летнее время в текущем сезоне, результат совпадает с тем же UTC или UTC + 1):PowerShell - Преобразование UTC в британское летнее время
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
?
Любое объяснение было бы действительно оценено.
'[TimeZoneInfo] :: ConvertTimeBySystemTimeZoneId ($ UTCTime, 'UTC', 'GMT Standard Time')' – PetSerAl
@PSA, GMT НЕ время 'UK' –
@JaquelineVanek Не ты Лондон здесь '[TimeZoneInfo]: : FindSystemTimeZoneById ('GMT Standard Time'). DisplayName'? Лондон больше не в Великобритании? – PetSerAl