2012-05-07 13 views
18

Próbuję utworzyć DateTime obiektu z określonego UTC datownik w PowerShell. Jaki jest najprostszy sposób to zrobić?Tworzenie obiektu DateTime z konkretnym UTC DateTime w PowerShell

Próbowałem:

Get-Date 
    -Format (Get-Culture).DateTimeFormat.UniversalSortableDateTimePattern 
    -Date "1970-01-01 00:00:00Z" 

ale otrzymuję ten wynik:

1969-12-31 19:00:00Z 

jest to kilka godzin wyłączony. Gdzie jest mój błąd w zrozumieniu?

Odpowiedz

22

Sam obiekt DateTime tworzony jest z właściwym czasie UTC. Ale kiedy PowerShell go wypisze, zamienia to na moją lokalną kulturę i strefę czasową, a tym samym na różnicę.

Dowód:

$UtcTime = Get-Date -Date "1970-01-01 00:00:00Z" 
$UtcTime.ToUniversalTime() 
+1

odparcie: $ UtcTime.Kind To znaczy, kiedy przekazać je do innej funkcji - w większości przypadków będzie to traktować jako czas lokalny, ponieważ jest to co jest faktycznie przechowywane. A PowerShell nie konwertuje go na czas lokalny podczas drukowania ... W przeciwnym razie twoja ToUniversalTime() również byłaby lokalna –

+2

'Get-Date' konwertuje podany czas UTC na czas lokalny i zapisuje go jako obiekt' datetime' z 'Kind 'ustaw na' Lokalny'. Przechowuje prawidłowy punkt fizyczny w czasie, ale jest to czas lokalny i zostanie wydrukowany w czasie lokalnym. Pamiętaj, że to nadal jest poprawna odpowiedź na pytanie. OP nie wymagał specjalnie tworzenia obiektu 'datetime' z rodzaju UTC. Rewizja. –

0

Jak to działa w .NET, prawda? PowerShell po prostu wywołuje metodę ToUniversalTime. Od 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. 
14
(get-date).ToUniversalTime().ToString("yyyyMMddTHHmmssfffffffZ") 
+2

Wartość ToString powinna obsługiwać 24 godziny, więc powinna mieć dużą wartość HH: '.ToString (" yyyyMMddTHHmmssfffffffZ ")' eg. 02:00:00 PM powinien się ... 140000, ponieważ UTC jest agnostyka stref czasowych –

+0

Działa to świetnie! 'PowerShell -NoProfile -ExecutionPolicy Bypass -Command" ((get-date) .ToUniversalTime()). ToString (\ "rrrr-MM-ddTHH: mm: ss + 0000 \") "' –

1
$utctime = New-Object DateTime 1970, 1, 1, 0, 0, 0, ([DateTimeKind]::Utc) 

Jeśli wydrukować $utctime, a następnie pojawi się:

1. januar 1970 00:00:00 

Również $utctime.Kind jest prawidłowo ustawiony Utc.

1
$time = [DateTime]::UtcNow | get-date -Format "yyyy-MM-ddTHH:mm:ssZ" 

Wydaje się również pracować

Powiązane problemy