Functions/Convert-EpochToDateTime.ps1

function Convert-EpochToDateTime
{
     <#
        .SYNOPSIS
            Converts an epoch (Unix) time stamp to System.DateTime.
        .EXAMPLE
            $jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2MDI2MDMzMDgsIm5iZiI6MTYwMjYwMzAwOCwiZXhwIjoxNjAyNjAzNjA4LCJzdWIiOiJ0b255Lmd1aW1lbGxpQGdtYWlsLmNvbSJ9.nivxCVSg8MtejEndn31natXPZcdjPHrIvV9_NUeXVtU"
 
            $deserializedPayload = $jwt | Get-JsonWebTokenPayload
 
            Convert-EpochToDateTime -Epoch $deserializedPayload.nbf
            Convert-EpochToDateTime -Epoch $deserializedPayload.iat
            Convert-EpochToDateTime -Epoch $deserializedPayload.exp
 
            Converts the epoch times in a deserialized JWT payload into DateTime objects.
        .PARAMETER Epoch
            The date/time expressed as Unix timestamp.
        .INPUTS
            System.Int
        .OUTPUTS
            System.DateTime
        .LINK
            https://en.wikipedia.org/wiki/Unix_time
            Get-JsonWebTokenPayload
            Convert-DateTimeToEpoch
    #>

    [CmdletBinding()]
    [OutputType([System.DateTime])]
    Param
    (
        [Parameter(Mandatory=$true,
                   ValueFromPipeline=$true,
                   Position=0)][Int]$Epoch
    )
    PROCESS
    {
        [nullable[datetime]]$convertedDateTime = $null
        try
        {
            $dt = [DateTime]::new(1970, 1, 1, 0, 0, 0, [DateTimeKind]::Utc)
            $convertedDateTime = $dt.AddSeconds($Epoch)
        }
        catch
        {
            Write-Error -Exception ([ArgumentException]::new("Unable to convert incoming value to DateTime.")) -Category InvalidArgument -ErrorAction Stop
        }

        return $convertedDateTime
    }
}