J'essaie de créer un objet DateTime
avec un horodatage UTC spécifique dans PowerShell. Quelle est la manière la plus simple de procéder?
J'ai essayé:
Get-Date
-Format (Get-Culture).DateTimeFormat.UniversalSortableDateTimePattern
-Date "1970-01-01 00:00:00Z"
mais j'obtiens cette sortie:
1969-12-31 19:00:00Z
C'est quelques heures de repos. Où est mon manque de compréhension?
L'objet DateTime
lui-même est en cours de création avec l'heure UTC appropriée. Mais lorsque PowerShell l'imprime, il le convertit dans ma culture locale et mon fuseau horaire, d'où la différence.
Preuve:
$UtcTime = Get-Date -Date "1970-01-01 00:00:00Z"
$UtcTime.ToUniversalTime()
(get-date).ToUniversalTime().ToString("yyyyMMddTHHmmssfffffffZ")
$utctime = New-Object DateTime 1970, 1, 1, 0, 0, 0, ([DateTimeKind]::Utc)
Si vous imprimez $utctime
, alors vous obtenez:
1. januar 1970 00:00:00
Aussi, $utctime.Kind
est correctement défini sur Utc
.
$time = [DateTime]::UtcNow | get-date -Format "yyyy-MM-ddTHH:mm:ssZ"
Cela semble également fonctionner
Vous pouvez utiliser la méthode SpecifyKind:
Horodatage PS C:\IT\s3> $
Mercredi 18 juillet 2018 19:57:14
PS C:\IT\s3> $ timestamp.kind
Non spécifié
PS C:\IT\s3> $ utctimestamp = [DateTime] :: SpecifyKind ($ timestamp, [DateTimeKind] :: Utc)
PS C:\IT\s3> $ utctimestamp
Mercredi 18 juillet 2018 19:57:14
PS C:\IT\s3> $ utctimestamp.kind
UTC
Voilà comment cela fonctionne dans .NET, non? PowerShell appelle simplement la méthode ToUniversalTime. De http://msdn.Microsoft.com/en-us/library/system.datetime.touniversaltime.aspx
The Coordinated Universal Time (UTC) is equal to the local time minus the
UTC offset. For more information about the UTC offset, see TimeZone.GetUtcOffset.
The conversion also takes into account the daylight saving time rule that applies
to the time represented by the current DateTime object.