Private/ConvertTo-SFDateTimeOffset.ps1

function ConvertTo-SFDateTimeOffset {
    [CmdletBinding()]
    [OutputType([DateTimeOffset])]
    param (
        [Parameter(Mandatory)]
        $Value
    )

    if ($Value -is [DateTimeOffset]) {
        return $Value
    }

    if ($Value -is [DateTime]) {
        return [DateTimeOffset]$Value
    }

    $text = [string]$Value
    if ($text -match '^/Date\((?<milliseconds>-?\d+)(?:[+-]\d{4})?\)/$') {
        return [DateTimeOffset]::FromUnixTimeMilliseconds([long]$Matches.milliseconds)
    }

    $parsed = [DateTimeOffset]::MinValue
    if ([DateTimeOffset]::TryParse(
        $text,
        [Globalization.CultureInfo]::InvariantCulture,
        [Globalization.DateTimeStyles]::AllowWhiteSpaces,
        [ref]$parsed
    )) {
        return $parsed
    }

    throw "Value '$text' is not a supported SuccessFactors date/time value."
}