将从图形调用获得的 DateTime 转换为在脚本 运行 所在的 PC 上设置的时区

Converting DateTime obtained from graph call to time zone set on the PC where scripts run

我有一个 powershell 脚本,我在其中执行对 microsoft.graph.callRecords (Documentation) 的调用。

我得到参数 startDateTime 和 endDateTimes,我想将它转移到意大利时区,问题是意大利时区每年 6 个月是 UTC+1,其他 6 个月是 UTC+2,所以我想直接从脚本所在的机器获取 TimeZoneId 运行(自动更新)。

特别是我正在获取图形调用返回的每个字段并从中创建一个 powershell 对象。我想在那一刻将上面提到的 *DateTimes 字段转换为本地时区。

这是我尝试过的方法,但它不起作用。

$participant | Add-Member -type NoteProperty -name "startDateTime"             -value [TimeZoneInfo]::ConvertTimeBySystemTimeZoneId(([DateTime]$usersession.startDateTime), 'UTC', (Get-TimeZone).toString()).ToString()

$usersession$participant 都应该是 powershell 对象。

大家对此有什么建议吗?

(Get-TimeZone).toString() returns DisplayName 属性:

PS> Get-TimeZone

Id                         : GMT Standard Time
DisplayName                : (UTC+00:00) Dublin, Edinburgh, Lisbon, London
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
StandardName               : GMT Standard Time
DaylightName               : GMT Daylight Time
BaseUtcOffset              : 00:00:00
SupportsDaylightSavingTime : True


PS> (Get-TimeZone).ToString()
(UTC+00:00) Dublin, Edinburgh, Lisbon, London

但是 ConvertTimeBySystemTimeZoneId 想要一个时区 ID(参见 ConvertTimeBySystemTimeZoneId(DateTime, String, String):

public static DateTime ConvertTimeBySystemTimeZoneId (DateTime dateTime, string sourceTimeZoneId, string destinationTimeZoneId);

dateTime - DateTime - The date and time to convert.

sourceTimeZoneId - String - The identifier of the source time zone.

destinationTimeZoneId - String - The identifier of the destination time zone.

试试这个:

PS> $timestamp = [DateTime]::NowUtc

PS> [TimeZoneInfo]::ConvertTimeBySystemTimeZoneId($timestamp, "UTC", (Get-TimeZone).Id)

07 May 2021 11:48:53