-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConvertTo-YamlTimestampText.ps1
More file actions
51 lines (48 loc) · 1.89 KB
/
Copy pathConvertTo-YamlTimestampText.ps1
File metadata and controls
51 lines (48 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function ConvertTo-YamlTimestampText {
<#
.SYNOPSIS
Formats a representable CLR timestamp for YAML emission.
#>
[CmdletBinding()]
[OutputType([string])]
param (
[Parameter(Mandatory)]
[object] $Value
)
try {
if ($Value -is [datetimeoffset]) {
$offsetMinutes = $Value.Offset.TotalMinutes
if ($offsetMinutes -lt -840 -or $offsetMinutes -gt 840 -or
$offsetMinutes -ne [System.Math]::Truncate($offsetMinutes) -or
$Value.UtcTicks -lt [datetime]::MinValue.Ticks -or
$Value.UtcTicks -gt [datetime]::MaxValue.Ticks) {
throw [System.ArgumentOutOfRangeException]::new('Value')
}
return $Value.ToString(
'o',
[System.Globalization.CultureInfo]::InvariantCulture
)
}
if ($Value.Kind -eq [System.DateTimeKind]::Local) {
return [datetimeoffset]::new($Value).ToString(
'o',
[System.Globalization.CultureInfo]::InvariantCulture
)
}
$utc = if ($Value.Kind -eq [System.DateTimeKind]::Utc) {
$Value
} else {
[datetime]::SpecifyKind($Value, [System.DateTimeKind]::Utc)
}
return $utc.ToString(
"yyyy-MM-dd'T'HH:mm:ss.fffffff'Z'",
[System.Globalization.CultureInfo]::InvariantCulture
)
} catch [System.ArgumentException] {
throw (New-YamlSerializationException -ErrorId 'YamlTimestampSerializationFailed' `
-Message 'The timestamp cannot be represented with its local or explicit UTC offset.')
} catch [System.FormatException] {
throw (New-YamlSerializationException -ErrorId 'YamlTimestampSerializationFailed' `
-Message 'The timestamp cannot be represented with its local or explicit UTC offset.')
}
}