Get-date от Powershell: как получить значение переменной вчера в 22:00? - PullRequest
27 голосов
/ 12 марта 2010

Для проверки мне нужна переменная вчерашнего дня в 22:00.

Я получаю вчерашнюю дату и текущее время с

$a = (get-date).AddDays(-1)

Но как мне манипулировать временем до 22.00 и оставить переменную как Date-Object?

Ответы [ 6 ]

47 голосов
/ 12 марта 2010

Используйте DateTime.Today, а не DateTime.Now (то, что возвращает Get-Date), потому что Today - это просто дата с 00:00 в качестве времени, а теперь это момент во времени до миллисекунды. (от мазенкабласт )

> [DateTime]::Today.AddDays(-1).AddHours(22)
Thursday, March 11, 2010 10:00:00 PM
12 голосов
/ 28 января 2016

Я вижу эту тему, но в моем случае я искал способ улучшить формат. Использование UFormat и добавление -1 день

(get-date (get-date).addDays(-1) -UFormat "%Y%m%d-%H%M")
4 голосов
/ 16 ноября 2011
(Get-Date (Get-Date -Format d)).AddHours(-2)
1 голос
/ 20 марта 2018

Форматирование в другом синтаксисе возможно таким образом

[DateTime]::Today.AddDays(-1).ToString("yyyyMMdd")

0 голосов
/ 31 мая 2018

Еще один способ сделать это:

(Get-Date).AddDays(-1).Date.AddHours(22)
0 голосов
/ 11 мая 2018

Я видел, по крайней мере, еще в одном месте, что люди не понимают, что Date-Time также требует времени, поэтому я решил поделиться этим здесь, поскольку это действительно очень мало:

Get-Date # Following the OP's example, let's say it's Friday, March 12, 2010 9:00:00 AM
(Get-Date '22:00').AddDays(-1) # Thursday, March 11, 2010 10:00:00 PM

Это также самый короткий способ вырезать информацию о времени и по-прежнему использовать другие параметры Get-Date. Например, вы можете получить секунды с 1970 года таким образом (метка времени Unix):

Get-Date '0:00' -u '%s' # 1268352000

Или вы можете получить метку времени ISO 8601:

Get-Date '0:00' -f 's' # 2010-03-12T00:00:00

Опять же, если вы перевернете операнды, это даст вам немного больше свободы при форматировании с любым объектом даты:

'The sortable timestamp: {0:s}Z{1}Vs measly human format: {0:D}' -f (Get-Date '0:00'), "`r`n"
# The sortable timestamp: 2010-03-12T00:00:00Z
# Vs measly human format: Friday, March 12, 2010

Однако, если вы хотите отформатировать метку времени Unix (через -u aka -UFormat), вам нужно будет сделать это отдельно. Вот пример этого:

'ISO 8601: {0:s}Z{1}Unix: {2}' -f (Get-Date '0:00'), "`r`n", (Get-Date '0:00' -u '%s')
# ISO 8601: 2010-03-12T00:00:00Z
# Unix: 1268352000

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...