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

[玩转系统] PowerShell 获取日期:您需要了解的一切!

作者:精品下载站 日期:2024-12-14 21:37:51 浏览:11 分类:玩电脑

PowerShell 获取日期:您需要了解的一切!


PowerShell 是一种功能强大的脚本语言,可让您自动执行任务并有效管理计算机系统。 PowerShell 中最有用的命令之一是 Get-Date,它允许用户检索当前日期和时间,以及对日期和时间执行各种计算和转换。在这份综合指南中,我将带您了解有关掌握 PowerShell Get-Date 所需了解的所有信息。

PowerShell 获取日期简介

在我们深入研究使用 Get-Date cmdlet 之前,我们首先了解 PowerShell 中的 DateTime 对象。 DateTime 对象表示特定的日期和时间,用于在 PowerShell 中执行各种日期和时间操作。您可以使用 Get-Date cmdlet 检索当前日期和时间。默认情况下,它将以本地计算机的格式显示日期和时间。

Get-Date cmdlet 的语法如下:


Get-Date
   [[-Date] <DateTime>]
   [-Year <Int32>]
   [-Month <Int32>]
   [-Day <Int32>]
   [-Hour <Int32>]
   [-Minute <Int32>]
   [-Second <Int32>]
   [-Millisecond <Int32>]
   [-DisplayHint <DisplayHintType>]
   [-UFormat <String>]
   [-Format <String>]
   [<CommonParameters>]

这是一个基本示例:


 Get-Date

该 cmdlet 返回长日期长时间格式的 DateTime 对象,可以使用其他 PowerShell cmdlet 对其进行格式化和操作。 DateTime 对象具有多个属性,包括年、月、日、小时、分钟、秒和毫秒等。可以使用其他 PowerShell cmdlet 访问和操作这些属性。

[玩转系统] PowerShell 获取日期:您需要了解的一切!

在 PowerShell 中使用日期变量

在 PowerShell 中,您可以将日期和时间分配给变量并在各种操作中使用它们。要将日期和时间分配给变量,您可以使用 PowerShell Get-Date cmdlet,如下所示:


$date = Get-Date "2022-01-01"

将日期和时间分配给变量后,您可以使用其他 PowerShell cmdlet 来操作它。例如,您可以使用 AddDays 方法在日期中添加或减去天数。您还可以使用 DateTime 对象的属性提取各个组成部分,例如日、月、年等。例如,要检索当前年份:


(Get-Date).Year
#Output: 2021

#More Examples
(Get-Date).DayOfWeek
#Output: Saturday

(Get-Date).DayOfWeek.value__
#Output: 6

PowerShell Get-Date 还提供了多种用于处理日期和时间对象的方法和属性。这些允许您提取特定的组成部分,例如日、月、年、小时、分钟或秒,并执行各种操作。 PowerShell Get-Date 还提供了多种用于处理日期和时间对象的方法和属性。这里有些例子:

  • $date.DayOfWeek 返回星期几。
  • $date.DayOfYear 返回一年中的第几天。
  • $date.Month 返回月份。
  • $date.Year 返回年份。
  • $date.Hour 返回小时。
  • $date.Minute 返回分钟。
  • $date.Second 返回第二个。

通过利用这些属性,您可以执行高级计算、操作特定组件或根据需要提取信息。除了属性之外,DateTime 对象中还有一些方法,例如“IsDaylightSavingTime()”来检查夏令时是否开启。

在 PowerShell 中设置日期和时间格式

PowerShell 提供了多种格式化日期和时间的方法。您可以将 -Format 参数与 Get-Date cmdlet 结合使用来格式化输出日期和时间。该参数接受各种标准和自定义格式字符串。例如,以下脚本可为您提供简单的日期格式:


Get-Date -Format "d"

您可以提供格式字符串来获取特定格式“dd-MMM-yyyy”的日期:


Get-Date -Format "dd-MMM-yyyy" #Output: 21-Aug-2021

 Get-Date -Format "MM/dd/yyyy HH:mm K"  # Output: 08/21/2023 20:17 +04:00 (with Time zone offset)

例如,如果您想以短格式显示时间,可以使用以下命令:


Get-Date -Format "t"

要显示 12 小时格式,请使用以下命令:


Get-Date -Format "hh:mm:ss tt"

#For 24-Hour format, use: Get-Date -Format "HH:mm:ss"

有关在 PowerShell 中格式化日期的更多信息,请参阅:如何在 PowerShell 中格式化日期?

使用 PowerShell Get-Date 获取不带时间的日期

在某些情况下,您可能只需要日期而不需要时间部分。 Get-Date 允许您使用具有指定格式的 ToString() 方法提取日期部分。例如:


(Get-Date).ToString("dd/MM/yyyy")
#Output: 21/08/2023

(Get-Date).ToString("dddd,dd MMM yyyy")
#Output: Monday,21 Aug 2023

这将以 dd/MM/yyyy 格式返回当前日期,不带时间部分。您可以根据自己的喜好自定义格式字符串。您还可以使用 Get-Date 命令以不同的格式检索日期和时间。这里还有一个例子:


Get-Date -Format "MM-dd-yyyy"

#Output: 08-21-2021

这将以 2 位数字输出月份编号和月份日期,并以 4 位数字格式输出年份。或者,您可以使用参数 -UFormat 指定 UNIX 格式的自定义日期和时间。该参数接受与 Microsoft .NET Framework 相同的格式字符串。


Get-Date -UFormat "%Y-%m-%d"

#Output (ISO Format): 2021-08-21

从 Get-Date cmdlet 获取日期部分的另一种方法是使用其 -DisplayHint 参数。


Get-Date -DisplayHint Date

使用 (Get-Culture).DateTimeFormat cmdlet 获取本地计算机区域性设置的所有日期时间格式:


PS C:\> (Get-Culture).DateTimeFormat
                                                                                                                                                                                AMDesignator                     : AM
Calendar                         : System.Globalization.GregorianCalendar
DateSeparator                    : /
FirstDayOfWeek                   : Sunday
CalendarWeekRule                 : FirstDay
FullDateTimePattern              : dddd, MMMM d, yyyy h:mm:ss tt
LongDatePattern                  : dddd, MMMM d, yyyy
LongTimePattern                  : h:mm:ss tt
MonthDayPattern                  : MMMM d
PMDesignator                     : PM
RFC1123Pattern                   : ddd, dd MMM yyyy HH':'mm':'ss 'GMT'
ShortDatePattern                 : M/d/yyyy
ShortTimePattern                 : h:mm tt
SortableDateTimePattern          : yyyy'-'MM'-'dd'T'HH':'mm':'ss
TimeSeparator                    : :
UniversalSortableDateTimePattern : yyyy'-'MM'-'dd HH':'mm':'ss'Z'
YearMonthPattern                 : MMMM yyyy
AbbreviatedDayNames              : {Sun, Mon, Tue, Wed...}
ShortestDayNames                 : {Su, Mo, Tu, We...}
DayNames                         : {Sunday, Monday, Tuesday, Wednesday...}
AbbreviatedMonthNames            : {Jan, Feb, Mar, Apr...}
MonthNames                       : {January, February, March, April...}
IsReadOnly                       : False
NativeCalendarName               : Gregorian Calendar
AbbreviatedMonthGenitiveNames    : {Jan, Feb, Mar, Apr...}
MonthGenitiveNames               : {January, February, March, April...}

在PowerShell中计算两个日期之间的差异

有时,您可能需要计算两个日期之间的持续时间或差异。 PowerShell 提供 DateTime 对象的 Subtract() 方法来实现此目的。例如,要计算两个日期之间的天数:


$startDate = Get-Date -Year 2021 -Month 1 -Day 1
$endDate = Get-Date -Year 2021 -Month 12 -Day 31
$duration = $endDate.Subtract($startDate).Days

这里,$startDate$endDate 表示您要计算其间差异的两个日期。结果将存储在变量$duration中。您可以使用以下命令代替“减去”:


$dateStart = Get-Date -Date "2023-01-01"
$dateEnd = Get-Date
$diff = $dateEnd - $dateStart #Alternatively: New-TimeSpan -Start $datestart -End $dateEnd
$diff.Days

PowerShell Get-Date 允许您使用 Subtract() 方法轻松计算两个日期之间的差异。此方法返回一个 TimeSpan 对象,表示两个日期之间的时间差。这是一个例子:


$date1 = Get-Date "2021-01-01"
$date2 = Get-Date "2022-01-01"
$diff = $date2.Subtract($date1)
$diff

在此示例中,我们创建两个变量 $date1$date2,并为它们分配特定日期。然后,我们使用 Subtract() 方法计算 $date2$date1 之间的差异。结果是一个 TimeSpan 对象,表示两个日期之间的持续时间。您可以访问 DaysHoursMinutesSeconds 以及 TimeSpan 的其他属性 对象来检索有关时差的特定信息。

[玩转系统] PowerShell 获取日期:您需要了解的一切!

使用 PowerShell 获取当前时间

除了检索当前日期和时间之外,PowerShell 还允许您仅提取时间部分。这在您需要执行特定时间操作的场景中非常有用。要使用 Get-Date 获取当前时间,您可以使用 TimeOfDay 属性:


(Get-Date).TimeOfDay

[玩转系统] PowerShell 获取日期:您需要了解的一切!

要获取当前时间元素,您还可以使用:


 Get-Date -Format "hh:mm:ss tt"

这将以 HH:mm:ss AM/PM 格式返回当前时间。

在 PowerShell 中比较日期

PowerShell 提供了多个用于比较日期和时间的运算符和 cmdlet。您可以使用 -lt、-le、-eq、-ne、-gt 和 -ge 运算符来比较日期和时间。

例如,要检查一个日期是否大于另一个日期,可以使用以下命令:


$date1 = Get-Date "2022-01-01"
$date2 = Get-Date "2022-01-02"
if ($date1 -lt $date2) {
    "First date is earlier!"
}

PowerShell Get-Date 允许您轻松比较日期,使您能够根据日期比较执行各种操作。 CompareTo() 方法对于此目的特别有用。它返回一个整数值,指示两个日期之间的关系。这是一个例子:


$date1 = Get-Date "2021-01-01"
$date2 = Get-Date "2022-01-01"

$result = $date1.CompareTo($date2)

在此示例中,我们创建两个变量 $date1$date2,并为它们分配特定日期。然后,我们使用 CompareTo() 方法来比较 $date1$date2。结果将是一个整数值:

  • 如果 $date1 早于 $date,则为 -1
  • 如果它们相等则为 0
  • 如果 $date1 晚于 $date2,则为 1。

您可以使用此信息根据日期比较有条件地执行代码。

要检查给定日期是否是过去的日期:


$GivenDate -lt (Get-Date)

这里,$givenDate 表示您要与当前日期进行比较的日期。您可以根据您的具体需要修改比较运算符。

获取计算日期

PowerShell 提供了多种用于执行高级日期和时间操作的 cmdlet 和方法。其中一些操作包括添加日期、减去日期和查找时间跨度等。这里有些例子:


 (Get-Date).AddDays(30)

这将显示从现在起 30 天后的日期和时间!同样,您可以将小时添加到当前时间,如下所示:


 (Get-Date).AddHours(2).ToString("MM-dd-yyyy HH:mm:ss")

这将以月-日-年时:分:秒的格式显示 2 小时后的日期和时间。与 AddDays() 类似,我们有可用于添加月、年、小时、分钟等的方法:


(get-date).AddDays(5)
(get-date).AddMonths(5)
(get-date).AddYears(5)
(get-date).AddHours(5)
(get-date).AddMinutes(5)
(get-date).AddSeconds(5)

时间比较:假设使用 48 小时分辨率 SLA 记录任务,并且您想要计算时间:


$logDate = "2023-08-18 14:00"
$dueDate = ([datetime]$logDate).AddHours(48)
if ((Get-Date) -gt $dueDate) {
    "SLA breached!"
}

使用 PowerShell 检索昨天的日期

有时,您可能需要出于各种目的检索昨天的日期。 PowerShell 提供了一种简单的方法来实现此目的,即使用 AddDays() 方法。要检索昨天的日期,您可以从当前日期中减去一天:


(Get-Date).AddDays(-1)

这将返回昨天对应的日期。同样,您可以使用以下命令获取上个月的信息:


$LastMonth = (Get-Date).AddMonths(-1).ToString('MMMM')

在 PowerShell 中添加或减去日期中的天数

例如,要向某个日期添加 10 天,您可以使用 Add-Date cmdlet,如下所示:


$date = Get-Date "2022-01-01"
$date = $date.AddDays(10)

在许多情况下,您可能需要在给定日期中添加或减去一定的天数。 PowerShell 提供了一种使用 DateTime 对象的 AddDays()Subtract() 方法来完成此操作的简单方法。例如,要在当前日期上添加 7 天:


(Get-Date).AddDays(7)

同样,要从当前日期减去 7 天,请使用:


(Get-Date).AddDays(-7)

作为替代选项,您可以使用 DateTime 对象的“Subtract()”方法:


(Get-Date).Subtract([TimeSpan]::FromDays(3))

您可以根据您的要求调整天数。甚至几分钟:假设从现在起 15 分钟!


$FutureTime = (Get-Date).AddMinutes(15)

找出 PowerShell 脚本的总执行时间

虽然您可以使用 Measure-Command 和 Stopwatch 方法来查找脚本执行时间,但以下是测量完成 PowerShell 脚本执行所需时间的简单方法:


# Capture the start time
$startTime = Get-Date

# Do some processing
Start-Sleep -Seconds 5

# Capture the end time
$endTime = Get-Date

# Calculate the time difference using New-TimeSpan
$executionDuration = New-TimeSpan -Start $startTime -End $endTime

# Display the execution time
Write-Output "Script took $($executionDuration.TotalMilliseconds) milliseconds to execute."
Write-Output "Script took $($executionDuration.TotalSeconds) seconds to execute."

在 PowerShell 中将 Get-Date 转换为字符串格式

有时,您可能需要将 Get-Date 输出转换为字符串格式以进行进一步处理或显示。 PowerShell 提供了多个用于将 Get-Date 转换为字符串的选项。常用的方法之一是 ToString() 方法,它允许您指定所需的格式。


(Get-Date).ToString("yyyy-MM-dd HH:mm:ss")

这会将当前日期和时间转换为 yyyy-MM-dd HH:mm:ss 格式的字符串格式。您可以自定义格式说明符以满足您的要求,例如显示时间(包括毫秒)或使用不同的分隔符。


Get-Date -Format "dd-MM-yyyy"

这会将日期转换为特定的字符串格式。例如,2021 年 8 月 20 日。

如何在 PowerShell 中将字符串转换为日期?

反过来呢?如果您有日期的字符串对象表示形式,并且想要将其转换为 DateTime 对象,则可以使用以下方法使用 Get-Date cmdlet:


$dateString = "2021-08-21"
$dateObject = Get-Date -Date $dateString
$dateObject

但是,如果日期字符串的格式无法立即被 Get-Date 识别,则可能需要使用 [datetime]::ParseExact() 方法显式指定格式。


[datetime]::ParseExact("20-08-2021", "dd-MM-yyyy", $null)

这将获取字符串并将其转换为日期时间对象。

使用 PowerShell 将日期添加到文件名

处理文件时,将当前日期附加到文件名通常很有用,以便更好地组织。 PowerShell 使用 Get-Date 使这项任务变得容易。您可以使用 ToString() 方法来格式化日期,然后将其与文件名字符串连接起来。

例如:在对系统进行故障排除时,经常会生成日志文件。为了防止覆盖并确保轻松检索,您可以将日期和时间附加到文件名中。


$Filename = "log_" + (Get-Date).ToString("yyyyMMdd_HHmmss") + ".log"

这将创建格式为 log_yyyyMMdd_HHmmss.log 的文件名,例如“log_20210821_082843.log”。您可以根据需要调整格式字符串。

这是另一种为文件名添加时间戳的方法:


$LogFile = "C:\Logs\MyLog_$(Get-Date -Format "yyyyMMdd_HHmmss").log"

该命令将创建一个文件名格式为 MyLog_20220101_120000.log 的日志文件。

创建带有年月日时间戳的目录:

如果您想创建一个名称后附加时间戳的目录,PowerShell 是您可靠的盟友。这是一个例子:


#Frame Folder Name with Timestamp
$BackupFolderName = "Backup_" + (Get-Date -Format "yyyy-MM-dd")

#Create a New Folder
New-Item -Path "C:\Backup" -Name $BackupFolderName -ItemType Directory

这将在“C:\Backup”中创建一个文件夹“Backup_2021-08-21”。

使用 PowerShell Get-Date 的实际示例

让我们看一些使用 PowerShell Get-Date 的实际示例。

示例 1:密码到期提醒日期

在许多企业设置中,用户密码会在设定的期限后过期。使用 Get-Date,您可以计算并提醒用户何时需要更改密码。


$expiryDate = (Get-Date).AddDays(90)
"Your password will expire on $expiryDate."

该命令将创建一个文件名格式为 MyLog_20220101_120000.log 的日志文件。

示例 2:安排任务时间

假设您想要安排任务在特定日期和时间运行。您可以使用以下命令:


$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date "2022-01-01 10:00:00")

该命令将创建一个触发器,该触发器将在 2022 年 1 月 1 日 10:00:00 运行一次任务。

示例3:年龄计算

如果您需要根据某人的出生日期计算其年龄:


$birthDate = "1990-08-20"
$age = ((Get-Date) - [datetime]$birthDate).Days / 365
[math]::Floor($age)

示例 4:清理旧日志

假设您要删除超过 30 天的日志文件:


$CutOffDate = (Get-Date).AddDays(-30)
Get-ChildItem -Path "C:\Logs" | Where-Object { $_.CreationTime -lt $CutOffDate } | Remove-Item

示例 5:验证日期输入

如果您正在获取用户输入的日期并需要检查它是否在过去 30 天内:


$userInput = "2021-07-20"
$inputDate = [datetime]$userInput
$currentDate = Get-Date
If (($currentDate - $inputDate).Days -le 30) {
    "The date is within the last 30 days."
}

使用 PowerShell Now 功能

PowerShell 提供了 Now 函数,它将日期和时间组件组合到一个对象中。这对于需要精确计时的时间管理任务非常有用。要使用“Now”检索当前日期和时间,您只需调用该函数:


[DateTime]::Now
#Output: Monday, August 21, 2023 10:46:02 PM

输出将采用系统区域设置指定的默认格式。

使用 PowerShell 获取日期的最佳实践

为了充分利用 PowerShell Get-Date,必须遵循一些最佳实践。采用这些实践可确保脚本的可靠性、可读性和可维护性。

  • 使用标准日期时间格式:设置日期和时间格式时,最好使用标准日期时间格式。这些格式可以跨不同平台和应用程序识别,从而更容易共享和操作数据。
  • 使用变量来存储日期和时间:为了使代码更具可读性和可维护性,最好使用变量来存储日期和时间。这样可以更轻松地在代码中引用日期和时间并在必要时对其进行修改。
  • 验证日期输入:如果您的脚本或函数接受日期输入,请务必验证它们以确保它们采用正确的格式。这可以避免潜在的错误或不正确的计算。
  • 始终处理时区:考虑 [datetime] 对象的 Kind 属性(例如,Local、Utc、Unspecified)。如果您正在使用多个时区的日期和时间或保存日期供以后使用,请考虑转换为 UTC 时间(通用时间坐标):(Get-Date).ToUniversalTime()
  • 使用 [datetime] 类型加速器进行转换:将字符串转换为日期时,请使用 [datetime] 类型加速器以保证清晰度和一致性。 $date=[日期时间]”2021-08-20”
  • 注意特定于文化的设置:请记住,日期格式可能是特定于文化的。确保您的脚本可以处理不同的格式,特别是当它们将在不同的区域设置中使用时。
  • 在需要时选择 .NET 方法:有时,使用 .NET 方法可以更轻松地对日期执行更具体的操作(例如检查年份是否为闰年)。不要回避他们。例如,[DateTime]::IsLeapYear((Get-Date).Year)
  • 脚本中的一致命名:在脚本中使用 Get-Date 时,请保持日期变量的一致命名约定以增强可读性。例如,“开始日期”、“结束日期”。

包起来

总之,掌握 PowerShell Get-Date 是任何 PowerShell 用户的一项基本技能。通过使用参数和计算,用户可以检索和操作各种格式的日期和时间信息。无论您是系统管理员还是 IT 专业人员,Get-Date 都是您工具箱中应该拥有的命令。无论您需要检索当前日期和时间、操作日期、比较日期还是执行复杂的日期计算,PowerShell Get-Date 都能提供满足您需求的工具和灵活性。

凭借本指南中概述的知识和技能,您可以自信地使用 Get-Date cmdlet 在 PowerShell 中执行各种日期和时间操作。通过了解 PowerShell Get-Date 的基础知识并探索其各种特性和功能,您可以显着提高您的脚本编写技能。

经常问的问题:

如何在 PowerShell 中将日期转换为字符串?

要在 PowerShell 中将日期转换为字符串,您可以使用具有特定格式的 ToString() 方法。例如,您可以使用以下代码:

(Get-Date).ToString("MM/dd/yyyy")
(Get-Date "2021-08-21").ToString("dd-MM-yyyy")

如何在 PowerShell 中仅从 DateTime 获取日期?

要仅从 PowerShell 中的 DateTime 对象获取日期,可以使用具有特定日期格式的 ToString() 方法。操作方法如下:

(Get-Date).ToString("yyyy-MM-dd")

如何在PowerShell中获取日期格式的月份名称?

使用带有自定义格式字符串的 ToString() 方法来获取月份名称。下面是一个示例:(Get-Date).ToString("MMMM")

如何在 PowerShell 中获取月份?

要仅获取月份,可以使用返回的 DateTime 对象的 Month 属性。以下是示例:

(Get-Date).Month
(Get-Date).ToString("MMMM")

如何在 PowerShell 中获取当前月份和年份?

要在 PowerShell 中获取当前月份和年份,您可以通过以下方式使用 Get-Date cmdlet:

(Get-Date).ToString("yyyy-MM")
Get-Date -Format "MMMM-yyyy"

用于日期比较的 PowerShell 运算符是什么?

如何在 PowerShell 中为日期添加 7 天?

要在 PowerShell 中向日期添加 7 天,可以使用 AddDays() 方法。有两种方法可以做到这一点:

(Get-Date).AddDays(7)
(Get-Date "2021-01-01").AddDays(7)

如何在 PowerShell 中从日期获取年份?

要从 PowerShell 中的日期获取年份,可以使用 DateTime 对象的 Year 属性。例如,(Get-Date).Year。您可以将 ToString() 方法与自定义格式字符串结合使用。例如: (Get-Date).ToString("yyyy")

如何以日期格式 PowerShell 获取 AM 和 PM?

要在 PowerShell 中获取日期格式的“AM”或“PM”指示符,可以将“tt”格式说明符与 DateTime 对象的 ToString() 方法结合使用。这是一个例子:

(Get-Date).ToString("yyyy-MM-dd tt")

如何在 PowerShell 中获取当前时间戳?

要在 PowerShell 中获取当前时间戳,可以使用 Get-Date cmdlet。只需在 PowerShell 控制台中输入“Get-Date”并按 Enter 键即可。这将以默认格式显示当前日期和时间。如果要自定义格式,请使用 -Format 参数,后跟格式字符串。例如,“Get-Date -Format ‘yyyy-MM-dd HH:mm:ss’”将为您提供格式为“YYYY-MM-DD HH:MM:SS”的当前时间戳。

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

取消回复欢迎 发表评论:

关灯