Private/Date.ps1
|
function ConvertFrom-RfcUtcTimestamp { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$Value ) return ([DateTimeOffset]::Parse( $Value, [System.Globalization.CultureInfo]::InvariantCulture, [System.Globalization.DateTimeStyles]::RoundtripKind )).UtcDateTime } function ConvertFrom-RfcUtcTimestampOrNull { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$Value ) try { return (ConvertFrom-RfcUtcTimestamp -Value $Value) } catch { return $null } } function ConvertTo-Rfc3339UtcZ { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [object]$Timestamp ) $dto = if ($Timestamp -is [DateTimeOffset]) { [DateTimeOffset]$Timestamp } elseif ($Timestamp -is [DateTime]) { [DateTimeOffset]::new(([DateTime]$Timestamp).ToUniversalTime()) } else { [DateTimeOffset]::Parse( [string]$Timestamp, [System.Globalization.CultureInfo]::InvariantCulture, [System.Globalization.DateTimeStyles]::RoundtripKind ).ToUniversalTime() } # Produce UTC RFC3339 with trailing 'Z' (no fractional seconds for compactness) return $dto.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss'Z'") } function ConvertTo-FilesafeTimestamp { <# .SYNOPSIS Converts a timestamp to a Windows-safe filename string (replaces colons with dashes). #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [datetimeoffset]$Timestamp ) return $Timestamp.UtcDateTime.ToString("o") -replace ':', '-' } function ConvertFrom-FilesafeTimestamp { <# .SYNOPSIS Converts a Windows-safe filename timestamp back to ISO 8601 format for parsing. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$Value ) return $Value -replace 'T(\d{2})-(\d{2})-(\d{2})', 'T$1:$2:$3' } |