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

icn*_*vad 29 powershell

对于检查,我需要昨天晚上10点的变量日期.

我得到昨天的日期和当前时间

$a = (get-date).AddDays(-1)
Run Code Online (Sandbox Code Playgroud)

但是我如何将时间操纵到22.00并将变量保留为Date-Object?

Jam*_*ack 49

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

> [DateTime]::Today.AddDays(-1).AddHours(22)
Thursday, March 11, 2010 10:00:00 PM
Run Code Online (Sandbox Code Playgroud)

  • 哇我在我的一个脚本中有这个长期复杂的功能,它完成了这一行所做的事情.对我而言,愚蠢. (3认同)

小智 12

我看到了这个主题,但就我而言,我一直在寻找一种改进格式的方法.使用UFormat并添加-1天

(get-date (get-date).addDays(-1) -UFormat "%Y%m%d-%H%M")
Run Code Online (Sandbox Code Playgroud)


小智 6

(Get-Date (Get-Date -Format d)).AddHours(-2)
Run Code Online (Sandbox Code Playgroud)


Plu*_*uto 5

我至少在另一个地方看到人们也没有意识到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
Run Code Online (Sandbox Code Playgroud)

这也是剥离时间信息并仍然使用Get-Date. 例如,您可以通过这种方式获得自 1970 年以来的秒数(Unix 时间戳):

Get-Date '0:00' -u '%s' # 1268352000
Run Code Online (Sandbox Code Playgroud)

或者您可以获得 ISO 8601 时间戳:

Get-Date '0:00' -f 's' # 2010-03-12T00:00:00
Run Code Online (Sandbox Code Playgroud)

再一次,如果您反转操作数,它会给您更多的自由来使用任何日期对象进行格式化:

'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
Run Code Online (Sandbox Code Playgroud)

但是,如果您想同时格式化 Unix 时间戳(通过-uaka -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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!