当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Get-Date - 如何在 PowerShell 中获取和使用日期

作者:精品下载站 日期:2024-12-14 03:43:52 浏览:14 分类:玩电脑

Get-Date - 如何在 PowerShell 中获取和使用日期


通过 Get-Date,我们可以获得当前日期和时间,这通常在 PowerShell 脚本中用于为输出添加时间戳或与日志记录结合使用。但除了时间戳之外,我们还可以使用日期来比较或计算文件的年龄,或者在过滤器中仅从结果集中选择特定范围。

一般来说,处理日期也总是有点挑战性。如何比较日期或计算两个日期之间的天数?那么如何获取 x 天前的日期呢?

在本文中,我们将了解如何使用 PowerShell 中的 Get-Date cmdlet 获取日期、不同的格式选项、使用日期进行计算以及比较它们。

PowerShell 获取日期

默认情况下,PowerShell Get-Date cmdlet 返回系统的当前日期和时间。如果没有任何参数,它只会以长格式输出日期和时间:

Get-Date

# Result
dinsdag 6 december 2022 15:51:54

大多数人不知道的是,Get-Date cmdlet 实际上不仅仅返回长格式的当前日期和时间。如果将结果存储到变量中或选择对象的所有属性,您将看到它还会返回一年中的某一天,例如:

Get-Date | Select *

[玩转系统] Get-Date - 如何在 PowerShell 中获取和使用日期

这意味着如果您只需要一周中的当前日期,您可以简单地执行以下操作:

Get-Date | Select DayOfWeek

# Result
DayOfWeek
---------
  Tuesday

# Or to get only the value
Get-Date | Select -ExpandProperty DayOfWeek

# Result
Tuesday

如果只想返回当前日期或当前时间,那么我们可以使用参数DisplayHint。这决定了显示哪个元素:

Get-Date -DisplayHint date

# Result
dinsdag 6 december 2022

# Or time
Get-Date -DisplayHint time
15:51:54

我们还可以从未来或过去的日期获取日期信息。使用参数-day、-month、-year,我们可以指定要创建的数据对象。例如,如果您想知道 2023 年 12 月 6 日是哪一天,我们可以更改日期:

Get-Date -year 2023

# Result (woensdag = wednesday ? )
woensdag 6 december 2023 16:11:58

正如你所看到的,我只指定了年份。因此对于其他值,使用当前日期。但您也可以指定完整日期:

Get-Date -day 1 -month 07 -year 2023 | select *

[玩转系统] Get-Date - 如何在 PowerShell 中获取和使用日期

设置日期格式

要在 PowerShell 中格式化日期,我们可以将 Get-Date 与 .Net 格式UFormat 说明符结合使用。 .Net 格式说明符使用更常见的字母来指定格式,而 UFormat 使用 % 后跟字母。在这两种情况下,输出都是字符串对象而不是日期对象。所以你只能得到按要求格式化的日期。

让我们从指定用于在 PowerShell 中格式化日期的 .Net 格式开始。要格式化日期,我们可以使用以下说明符:

dd

2 位数字 月份中的第几天

MM

2 位数字 月份号码

yy

2 位数字年份编号

dddd

当天的全名

MMMM

月份的全名

yyyy

4 位数字年份编号

您可以在文档中找到说明符的完整列表。
因此,为了格式化日期,我们可以指定参数 -Format ,后跟具有我们想要的日期格式的字符串。例如:

Get-Date -Format "dd-MM-yyyy"
06-12-2022

UFormat 使用相同的原理,当然只是不同的说明符。

笔记

值得一提的是,自 PowerShell 6.2 以来,UFormat 说明符发生了变化。因此,在不同的 PowerShell 版本上运行脚本时请记住这一点。%d

2 位数字 月份中的第几天

%m

2 位数字 月份号码

%y

2 位数字年份编号

%A

当天的全名

%B

月份的全名

%Y

4 位数字年份编号

您可以在文档中找到 UFormat 说明符的完整列表。

Get-Date -UFormat "%A %d %b %Y"

# Result
dinsdag 06 dec 2022

日期时间格式

就像日期格式一样,我们可以选择.Net 格式和UFormat 说明符来格式化PowerShell 中Get-Date 的DateTime 结果。两者都返回格式化字符串而不是日期对象。

要使用常用的 .Net 格式说明符格式化日期的时间部分,您需要使用 -format 参数,后跟一个包含要返回的时间或 DateTime 格式的字符串。

HH:mm

24 小时格式的时间

HH:mm:ss

24 小时格式的时间,带秒

K

UTC 时区偏移

hh:mm

12 小时格式的时间

hh:mm – tt

12 小时格式的时间(含 AM/PM)

Get-Date -Format "HH:mm K"

# Result
16:09 +01:00

要使用 UFormat 说明符在 PowerShell 中格式化日期时间,您需要使用参数 -Uformat 后跟具有格式的字符串。您可以在文档中找到 UFormat 的所有选项。

例如,要在 PowerShell 中格式化日期时间,我们可以执行以下操作:

Get-Date -UFormat "%A %d %B %Y %R %Z"

# Result
dinsdag 06 december 2022 16:14 +01

获取日期减去 1 天

可以使用 AddDays 方法在 PowerShell 中的日期中添加或减去天数。我们可以使用正数来增加天数,使用负数来减少天数。因此,如果我们想获取昨天的日期,我们首先使用 Get-Date 减去 1 天来获取当前日期:

(Get-Date).AddDays(-1)

# Result
maandag 5 december 2022 16:24:48

如您所见,我们需要将 Get-Date cmdlet 括在括号中。这样,首先执行 Get-Date cmdlet,然后再执行其他命令或方法。

当需要计算多个日期时,例如当我们需要在SharePoint中恢复两个日期之间的文件时,那么您还可以将当前日期存储在变量中。然后使用 AddDays 方法添加或减去天数:

$today = Get-Date  # dinsdag 6 december 2022 16:28:51
$tomorrow = $today.AddDays(1)  # woensdag 7 december 2022 16:28:51
$yesterday = $today.AddDays(-1)  # maandag 5 december 2022 16:28:51 

AddDays 并不是我们可以用来计算日期的唯一方法。例如,我们还可以添加或减去月份、年份或小时。全部使用与 AddDays 方法相同的原理:

  • 添加刻度
  • 添加毫秒
  • 添加秒数
  • 添加分钟数
  • 添加营业时间
  • 添加天数
  • 添加月份
  • 添加年份

有趣的是,如果我们愿意,我们可以将它们全部组合起来:

$today = Get-Date  # dinsdag 6 december 2022 16:28:51
$today.AddYears(2).AddMonths(3).AddDays(1).AddHours(2).AddMinutes(10)

# Result:
vrijdag 7 maart 2025 18:38:51

在 PowerShell 中比较日期

在 PowerShell 中比较日期实际上比您想象的要容易。例如,可以使用普通的 PowerShell 比较运算符 -gt-lt 直接比较 DateTime 对象。

因此,要在 PowerShell 中比较两个日期,我们可以执行以下操作:

$today = Get-Date # dinsdag 6 december 2022 16:44:51
$secondDate = Get-Date -Date "20-10-2022" # donderdag 20 oktober 2022

# Check if secondDate is before or after Today
$today -gt $secondDate  # True
$today -lt $secondDate  # False

我们还可以使用此方法来检查文件是否是在某个日期之前或之后创建的,使用 Get-ChildItem cmdlet:

$secondDate = Get-Date -Date "20-10-2022" # donderdag 20 oktober 2022
$fileDate = get-childitem updates.txt | Select -ExpandProperty CreationTime

# FileDate is donderdag 24 februari 2022 13:11:41

if ($secondDate -gt $fileDate) {
   Write-Host "File is older then $secondDate"
}

使用 PowerShell 将字符串转换为日期

在 PowerShell 中使用日期之前,您需要确保日期是 DateTime 对象。例如,当您有一个包含日期的 CSV 文件时,您想使用该文件。然后您需要先将字符串转换为日期。

为此,我们可以简单地将字符串转换为 DateTime 对象:

[DateTime] "2022-11-24"

# Result
maandag 24 november 2022 00:00:00

如果需要,我们还可以立即格式化结果,方法是将 dateTime 转换放在括号之间,然后将其转换为格式化字符串:

([DateTime] "2022-11-24").ToString('yyyy-MM-dd')

如果要转换为日期的字符串具有不同的格式,那么您可能需要使用 ParseExact 指定日期字符串的格式。 这里重要的是您指定输入格式,而不是输出格式!

$dateString = '14-nov-22'
$date = [datetime]::ParseExact($dateString, "dd-MMM-yy", $null)

获取日期之间的天数

我们可以比较日期、在日期中添加或减去天数,但您知道我们还可以在 PowerShell 中计算日期之间的天数(或时间)吗?为此,我们将使用带有两个日期对象的 New-TimeSpan cmdlet。

假设我们想知道距离圣诞节还有几天。为此,我们使用 Get-Date 获取当前日期(开始日期),并为 12 月 25 日(结束日期)创建一个新的日期对象:

$today = Get-Date
$Christmas = Get-Date -day 25 -month 12

New-TimeSpan -Start $today -End $christmas

# Result
Days              : 18
Hours             : 0
Minutes           : 5
Seconds           : 22
Milliseconds      : 241
Ticks             : 15555222411487
TotalDays         : 18,0037296429248
TotalHours        : 432,089511430194
TotalMinutes      : 25925,3706858117
TotalSeconds      : 1555522,2411487
TotalMilliseconds : 1555522241,1487

[玩转系统] Get-Date - 如何在 PowerShell 中获取和使用日期

总结

使用日期一开始可能看起来很困难,但我不得不说,PowerShell 让它变得非常容易。正如您所看到的,我们可以轻松比较日期、在日期中添加或减去日期和时间以及计算两个日期之间的日期和时间。

我希望这篇文章对您有所帮助,如果您有任何疑问,请在下面发表评论。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯