| | | 1 | | <# |
| | | 2 | | .SYNOPSIS |
| | | 3 | | Recursively converts DateTimeOffset instances to DateTime in a given object. |
| | | 4 | | .DESCRIPTION |
| | | 5 | | This function takes an input object and recursively traverses its structure. |
| | | 6 | | If it encounters any DateTimeOffset instances, it converts them to DateTime. |
| | | 7 | | It handles nested dictionaries and lists, ensuring that all DateTimeOffset |
| | | 8 | | instances are converted regardless of their depth in the object hierarchy. |
| | | 9 | | .PARAMETER InputObject |
| | | 10 | | The object to process, which may contain DateTimeOffset instances. |
| | | 11 | | .EXAMPLE |
| | | 12 | | $obj = @{ |
| | | 13 | | Date1 = [DateTimeOffset]::Now |
| | | 14 | | Nested = @{ Date2 = [DateTimeOffset]::UtcNow } |
| | | 15 | | List = @([DateTimeOffset]::Now, "string", 123) |
| | | 16 | | } |
| | | 17 | | $converted = Convert-DateTimeOffsetToDateTime $obj |
| | | 18 | | # $converted will have DateTime instances instead of DateTimeOffset. |
| | | 19 | | .NOTES |
| | | 20 | | This function is useful for ensuring compatibility with systems that expect DateTime |
| | | 21 | | rather than DateTimeOffset, such as certain serialization scenarios. |
| | | 22 | | #> |
| | | 23 | | function Convert-DateTimeOffsetToDateTime { |
| | | 24 | | param( |
| | | 25 | | [Parameter()] |
| | | 26 | | [AllowNull()] |
| | | 27 | | $InputObject |
| | | 28 | | ) |
| | 2 | 29 | | if ($null -eq $InputObject) { return $null } |
| | 1 | 30 | | if ($InputObject -is [DateTimeOffset]) { |
| | | 31 | | # Preserve naive timestamps (those without explicit zone) as 'Unspecified' kind so no offset is appended |
| | 0 | 32 | | $dto = [DateTimeOffset]$InputObject |
| | 0 | 33 | | return [DateTime]::SpecifyKind($dto.DateTime, [System.DateTimeKind]::Unspecified) |
| | | 34 | | } |
| | 1 | 35 | | if ($InputObject -is [System.Collections.IDictionary]) { |
| | 3 | 36 | | foreach ($k in @($InputObject.Keys)) { $InputObject[$k] = Convert-DateTimeOffsetToDateTime $InputObject[$k] } |
| | 1 | 37 | | return $InputObject |
| | | 38 | | } |
| | 1 | 39 | | if ($InputObject -is [System.Collections.IList]) { |
| | 4 | 40 | | for ($j = 0; $j -lt $InputObject.Count; $j++) { $InputObject[$j] = Convert-DateTimeOffsetToDateTime $InputObject |
| | 1 | 41 | | return $InputObject |
| | | 42 | | } |
| | 1 | 43 | | return $InputObject |
| | | 44 | | } |