Вопрос по – Создание объекта DateTime с указанным UTC DateTime в PowerShell

22

Я пытаюсь создатьDateTime объект с определенной меткой времени UTC в PowerShell. Какой самый простой способ сделать это?

Я пытался

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

но я получаю этот вывод:

<code>1969-12-31 19:00:00Z
</code>

Сейчас несколько часов. Где моя ошибка в понимании?

Ваш Ответ

6   ответов
28

DateTimeам объект @ создается с правильным временем UTC. Но когда PowerShell распечатывает его, он преобразует его в мою местную культуру и часовой пояс, поэтому разниц

Proof:

$UtcTime = Get-Date -Date "1970-01-01 00:00:00Z"
$UtcTime.ToUniversalTime()
disproof: $ UtcTime.Kind Я имею в виду, когда вы передаете его какой-то другой функции - в большинстве случаев он будет обрабатывать это как местное время, потому что это то, что на самом деле хранится. И PowerShell не преобразует его в ваше местное время при печати ... В противном случае ваш ToUniversalTime () также будет локальным Dmitry Gusarov
Get-Date преобразует указанное время UTC в местное время и сохраняет его какdatetime объект сKind установлен вLocal. Он сохраняет правильную физическую точку во времени, но это местное время и будет напечатано по местному времени. Обратите внимание, что это все еще правильный ответ на вопрос. ОП специально не просила о созданииdatetime объект с добрым UTC. Upvoted. Florian Winter
7
$utctime = New-Object DateTime 1970, 1, 1, 0, 0, 0, ([DateTimeKind]::Utc)

Если ты распечатываешь$utctime, тогда вы получите:

1. januar 1970 00:00:00

Также,$utctime.Kind правильно установлено наUtc.

16
(get-date).ToUniversalTime().ToString("yyyyMMddTHHmmssfffffffZ")
Это прекрасно работает!PowerShell -NoProfile -ExecutionPolicy Bypass -Command "((get-date).ToUniversalTime()).ToString(\"yyyy-MM-ddTHH:mm:ss+0000\")" Jay Taylor
Значение ToString должно поддерживать 24 часа, поэтому оно должно иметь заглавную HH:.ToString("yyyyMMddTHHmmssfffffffZ") например 14:00:00 должно стать .. 140000, поскольку UTC не зависит от часового пояс Anders Rask
3
$time = [DateTime]::UtcNow | get-date -Format "yyyy-MM-ddTHH:mm:ssZ"

[DateTime]::UtcNow.ToString('u') лучший выбор, как теMM а такжеmm может быть с ошибкой. Я подал такую ошибку в систему в другой месяц. LosManos
1

PS C: \ IT \ s3> $ timestamp

Среда, 18 июля 2018 г., 19:57:

PS C: \ IT \ s3> $ timestamp.kind

Неопределенны

PS C: \ IT \ s3> $ utctimestamp = [DateTime] :: SpecifyKind ($ timestamp, [DateTimeKind] :: Utc)

PS C: \ IT \ s3> $ utctimestamp

Среда, 18 июля 2018 г., 19:57:

PS C: \ IT \ s3> $ utctimestamp.kind

Универсальное глобальное врем

0

верно? PowerShell просто вызывает метод ToUniversalTime. Отhttp: //msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.asp

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. 

Похожие вопросы