Powershell的获取日期:如何在变量中获取昨天的22:00?

hrirmatl  于 2023-04-06  发布在  Shell
关注(0)|答案(8)|浏览(202)

对于检查,我需要昨天的日期在10:00下午在一个变量。
我得到昨天的日期和当前时间

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

但是,我如何将时间操作为22.00,并将变量保持为Date-Object?

ebdffaop

ebdffaop1#

使用DateTime.Today而不是DateTime.Now(这是Get-Date返回的),因为Today只是以00:00为时间的日期,而现在是精确到毫秒的时刻。(来自masenkablast)

> [DateTime]::Today.AddDays(-1).AddHours(22)
Thursday, March 11, 2010 10:00:00 PM
mcvgt66p

mcvgt66p2#

我看到这个主题,但在我的情况下,我正在寻找一种方法来改善格式。使用UFormat并添加-1天

(Get-Date (Get-Date).addDays(-1) -UFormat "%Y%m%d-%H%M")
1zmg4dgp

1zmg4dgp3#

(Get-Date (Get-Date -Format d)).AddHours(-2)
knsnq2tg

knsnq2tg4#

我在至少一个其他地方看到,人们没有意识到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

希望这有帮助!

ia2d9nvy

ia2d9nvy5#

通过这种方式,可以使用其他语法进行格式化
[DateTime]::Today.AddDays(-1).ToString("yyyyMMdd")

hiz5n14c

hiz5n14c6#

当我用Year/Month/Day获取昨天的日期时用途:

$Variable = Get-Date((get-date ).AddDays(-1))  -Format "yyyy-MM-dd"
qlvxas9a

qlvxas9a7#

另一种方法是:

(Get-Date).AddDays(-1).Date.AddHours(22)
au9on6nz

au9on6nz8#

另一种可能的方法,但Unix时间戳

([int64](Get-Date -UFormat %s) - [int64](New-TimeSpan -Hours 1).TotalSeconds)

相关问题