powershell@日期和时间命令和对象
文章目录
abstract
PowerShell 中处理日期和时间非常灵活且功能强大。下面是一些常用的日期和时间操作示例,帮助你更好地理解和使用这些功能。
获取当前日期和时间
# 获取当前日期和时间 $now = Get-Date Write-Output $now
格式化日期和时间
可以通过 -Format
参数自定义日期和时间的格式。例如:
# 以自定义格式输出当前日期和时间 $now = Get-Date $formattedDate = $now.ToString("yyyy-MM-dd HH:mm:ss") Write-Output $formattedDate
常用的格式化字符串包括:
yyyy
:四位数年份MM
:两位数月份dd
:两位数日期HH
:24小时制小时mm
:两位数分钟ss
:两位数秒
日期计算👺
可以对日期和时间进行加减操作。例如,获取7天后的日期:
# 计算7天后的日期 $futureDate = (Get-Date).AddDays(7) Write-Output $futureDate
创建自定义日期和时间👺
可以使用 Get-Date
的参数来创建特定的日期和时间。例如:
# 创建一个自定义日期和时间 $customDate = Get-Date -Year 2023 -Month 12 -Day 25 -Hour 10 -Minute 30 -Second 0 Write-Output $customDate
使用类型转换获取日期对象:
关于运算符[ ] - PowerShell | Microsoft Learn
$dt= [datetime]"2024-07-30 14:47:11" write-host $dt
又比如
# $dt1= [datetime] '2/20/88'执行结果如下 PS [C:\Users\cxxu\Desktop]> $dt1= [datetime] '2/20/88' PS [C:\Users\cxxu\Desktop]> $dt1 1988年2月20日 0:00:00
时间间隔计算和比较
[DateTime] '2/20/88' - [DateTime] '1/20/88' -eq [TimeSpan] '31'
[datetime]
类型及其构造函数
-
datetime
是 PowerShell 中用于表示日期和时间的类型。通过将字符串转换为[datetime]
类型,可以将字符串解析为一个日期时间对象。 -
PS [C:\Users\cxxu\Desktop]> [datetime]::new OverloadDefinitions ------------------- datetime new(long ticks) datetime new(long ticks, System.DateTimeKind kind) datetime new(System.DateOnly date, System.TimeOnly time) datetime new(System.DateOnly date, System.TimeOnly time, System.DateTimeKind kind) datetime new(int year, int month, int day) datetime new(int year, int month, int day, System.Globalization.Calendar calendar) datetime new(int year, int month, int day, int hour, int minute, int second, int millisecond, System.Globalization.Calendar calendar, System.DateTimeKind kind) datetime new(int year, int month, int day, int hour, int minute, int second) ....
例如
PS [C:\Users\cxxu\Desktop]> [datetime]'11/11/11' 2011年11月11日 0:00:00
PS [C:\Users\cxxu\Desktop]> [datetime]::new(2011,11,11,11,11,11) 2011年11月11日 11:11:11
字符串格式:
- 字符串必须符合能够被解析为日期和时间的格式。常见格式包括
yyyy-MM-dd HH:mm:ss
、MM/dd/yyyy HH:mm:ss
等。
方法小结
方法 | 示例代码 |
---|---|
[datetime] 类型转换 | [datetime]$dateString |
Get-Date cmdlet | Get-Date -Date $dateString |
System.Globalization.DateTimeFormatInfo 类 | [datetime]::ParseExact($dateString, $dateFormat, [System.Globalization.CultureInfo]::InvariantCulture) |
这些方法可以帮助你将字符串转换为日期对象,根据具体需求选择合适的方法即可。
缺省值
创建datetime
对象时,如果不是指定一个完整的’年-月-日 时:分:秒’,那么缺省的部分自动采集自当天(执行相关命令的当天)
假设我做此篇记录的时候是2024-7-30,那么有以下效果
PS C:\Users\cxxu\Desktop> [datetime]"20:16:11" 2024年7月30日 20:16:11 PS C:\Users\cxxu\Desktop> $time=Get-Date -Minute 52 PS C:\Users\cxxu\Desktop> $time 2024年7月30日 20:52:37 PS C:\Users\cxxu\Desktop> $time=Get-Date -Minute 52
计算日期差异
可以使用 [System.DateTime]
类型的方法来计算两个日期之间的差异。例如,计算两个日期之间的天数差异:
# 计算两个日期之间的天数差异 $startDate = Get-Date -Year 2023 -Month 1 -Day 1 $endDate = Get-Date -Year 2023 -Month 12 -Day 31 $daysDifference = ($endDate - $startDate).Days Write-Output $daysDifference
获取特定部分的日期和时间
可以从日期和时间对象中提取特定部分,例如年、月、日、时、分、秒:
# 获取当前日期的年、月、日、时、分、秒 $now = Get-Date $year = $now.Year $month = $now.Month $day = $now.Day $hour = $now.Hour $minute = $now.Minute $second = $now.Second Write-Output "Year: $year, Month: $month, Day: $day" Write-Output "Hour: $hour, Minute: $minute, Second: $second"
比较日期和时间
可以直接比较日期和时间对象。例如:
# 比较两个日期和时间 $date1 = Get-Date -Year 2023 -Month 1 -Day 1 $date2 = Get-Date -Year 2023 -Month 12 -Day 31 if ($date1 -lt $date2) { Write-Output "$date1 is earlier than $date2" } else { Write-Output "$date1 is later than or equal to $date2" }
常用日期操作总结表
操作 | 示例代码 |
---|---|
获取当前日期和时间 | Get-Date |
自定义格式输出 | Get-Date -Format "yyyy-MM-dd HH:mm:ss" |
日期加减 | (Get-Date).AddDays(7) |
创建自定义日期和时间 | Get-Date -Year 2023 -Month 12 -Day 25 -Hour 10 -Minute 30 |
计算日期差异 | ($endDate - $startDate).Days |
提取日期部分 | $now.Year, $now.Month, $now.Day, $now.Hour, $now.Minute |
比较日期和时间 | $date1 -lt $date2 |
TimeSpan
是 .NET 和 PowerShell 中用于表示时间间隔(持续时间)的结构。它可以表示从几毫秒到几天的时间跨度。以下是对 TimeSpan
的详细介绍,包括其创建方法、属性和常用操作。
时间间隔 TimeSpan 👺
创建TimeSpan对象
1. 使用New-TimeSpan
命令
可以使用 TimeSpan
的构造函数来创建时间间隔对象。构造函数有多种重载,最常用的是使用天、小时、分钟、秒和毫秒来初始化 TimeSpan
对象。
# 创建一个表示1天2小时30分钟45秒的TimeSpan对象 $timeSpan = New-TimeSpan -Days 1 -Hours 2 -Minutes 30 -Seconds 45 Write-Output $timeSpan
2. 使用[TimeSpan]
构造函数new()
查看[Timespan]
对象的构造函数有多少种调用方法(一般用的较多的是第二种,即:timespan new(int hours, int minutes, int seconds)
三个参数分别表示:时/分/秒)
PS [C:\Users\cxxu\Desktop]> [timespan]::new OverloadDefinitions ------------------- timespan new(long ticks) timespan new(int hours, int minutes, int seconds) timespan new(int days, int hours, int minutes, int seconds) timespan new(int days, int hours, int minutes, int seconds, int milliseconds) timespan new(int days, int hours, int minutes, int seconds, int milliseconds, int microseconds)
# 创建一个表示3小时15分钟的TimeSpan对象 $timeSpan = [TimeSpan]::new(3, 15, 0) Write-Output $timeSpan
PS [C:\Users\cxxu\Desktop]> $timeSpan = [TimeSpan]::new(3, 15, 0) PS [C:\Users\cxxu\Desktop]> Write-Output $timeSpan Days : 0 Hours : 3 Minutes : 15 Seconds : 0 Milliseconds : 0 Ticks : 117000000000 TotalDays : 0.135416666666667 TotalHours : 3.25 TotalMinutes : 195 TotalSeconds : 11700 TotalMilliseconds : 11700000
3. 通过字符串解析做类型转换
可以通过解析字符串来创建 TimeSpan
对象。
# 通过字符串解析创建TimeSpan对象 $timeSpan = [TimeSpan]::Parse("1:02:30:45") # 格式为 "d:hh:mm:ss" Write-Output $timeSpan
如果是仅仅指定(天/时/分/秒)中的一两项,则使用New-TimeSpan
方法更加方便和具有可读性
TimeSpan 属性
TimeSpan
对象具有多个属性,可以获取其各个组成部分:
$timeSpan = New-TimeSpan -Days 1 -Hours 2 -Minutes 30 -Seconds 45 # 输出TimeSpan的各个属性 Write-Output "Days: $($timeSpan.Days)" Write-Output "Hours: $($timeSpan.Hours)" Write-Output "Minutes: $($timeSpan.Minutes)" Write-Output "Seconds: $($timeSpan.Seconds)" Write-Output "Milliseconds: $($timeSpan.Milliseconds)" Write-Output "TotalDays: $($timeSpan.TotalDays)" Write-Output "TotalHours: $($timeSpan.TotalHours)" Write-Output "TotalMinutes: $($timeSpan.TotalMinutes)" Write-Output "TotalSeconds: $($timeSpan.TotalSeconds)" Write-Output "TotalMilliseconds: $($timeSpan.TotalMilliseconds)"
常用操作
1. 时间间隔相加减
可以将两个 TimeSpan
对象相加或相减。
$timeSpan1 = New-TimeSpan -Hours 1 -Minutes 30 $timeSpan2 = New-TimeSpan -Minutes 45 # 相加 $resultAdd = $timeSpan1 + $timeSpan2 Write-Output "Addition: $resultAdd" # 相减 $resultSubtract = $timeSpan1 - $timeSpan2 Write-Output "Subtraction: $resultSubtract"
2. 时间间隔比较
可以比较两个 TimeSpan
对象的大小。
$timeSpan1 = New-TimeSpan -Hours 1 $timeSpan2 = New-TimeSpan -Minutes 45 if ($timeSpan1 -gt $timeSpan2) { Write-Output "$timeSpan1 is greater than $timeSpan2" } elseif ($timeSpan1 -lt $timeSpan2) { Write-Output "$timeSpan1 is less than $timeSpan2" } else { Write-Output "$timeSpan1 is equal to $timeSpan2" }
3. 转换为字符串
可以将 TimeSpan
对象转换为字符串,便于显示或存储。
$timeSpan = New-TimeSpan -Days 1 -Hours 2 -Minutes 30 -Seconds 45 $timeSpanString = $timeSpan.ToString() Write-Output $timeSpanString
PS [C:\Users\cxxu\Desktop]> Write-Output $timeSpanString 1.02:30:45
示例总结
以下是对 TimeSpan
操作的总结表:
操作 | 示例代码 |
---|---|
创建 TimeSpan | New-TimeSpan -Days 1 -Hours 2 -Minutes 30 -Seconds 45 |
使用构造函数创建 | [TimeSpan]::new(3, 15, 0) |
通过字符串解析创建 | [TimeSpan]::Parse("1:02:30:45") |
获取属性 | $timeSpan.Days , $timeSpan.Hours , $timeSpan.TotalMinutes |
时间间隔相加减 | $timeSpan1 + $timeSpan2 , $timeSpan1 - $timeSpan2 |
时间间隔比较 | $timeSpan1 -gt $timeSpan2 , $timeSpan1 -lt $timeSpan2 |
转换为字符串 | $timeSpan.ToString() |
通过这些示例,你可以更好地理解和使用 PowerShell 中的 TimeSpan
对象来处理时间间隔。如果有更多具体问题或需要进一步的解释,请随时提问。
用例案例
触发器用例:在特定时间打开notepad
你可以使用 PowerShell 命令行来创建一个计划任务,在指定的时间(例如14:47:11)打开 Notepad。下面是详细的步骤和命令:
步骤和命令
-
定义任务动作:
首先,定义任务要执行的动作。在这个例子中,任务动作是打开 Notepad。$action = New-ScheduledTaskAction -Execute "notepad.exe" -
定义任务触发器:
触发器定义了任务何时执行。在这个例子中,我们设置任务在14:47:11执行。# 设定触发时间 $triggerTime = [datetime]"2024-07-30 20:16:11" #或者:[datetime]"7/30/2024 20:16:11" $trigger = New-ScheduledTaskTrigger -Once -At $triggerTime -
创建任务:
创建计划任务并将其注册到任务计划程序。Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "OpenNotepadAtSpecificTime" -Description "Open Notepad at 20:16:11"
完整命令示例
将上述步骤结合在一起的完整命令如下:
$action = New-ScheduledTaskAction -Execute "notepad.exe" $triggerTime = [datetime]"2024-07-30 20:16:11" $trigger = New-ScheduledTaskTrigger -Once -At $triggerTime Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "OpenNotepadAtSpecificTime" -Description "Open Notepad at 20:16:11"
注意事项
-
权限:
创建和注册计划任务通常需要管理员权限。在运行这些命令之前,确保你以管理员身份运行 PowerShell。 -
时间格式:
确保时间格式正确,特别是日期和时间的格式要符合[datetime]
类型的要求。 -
检查任务:
你可以使用任务计划程序(Task Scheduler)或 PowerShell 查看和验证创建的任务。例如:Get-ScheduledTask -TaskName "OpenNotepadAtSpecificTime"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2023-09-08 LA@二次型分类@正定二次型@主子式
2022-09-08 java_从键盘输⼊⼀串字符串,存⼊ArrayList中,再将其 分别按字典序升序排序、按字典序降序排序、 按字符串长度降序排序、先按字符串长度降序排列 再按字典序排序。
2022-09-08 AM@三角级数三角函数系@傅里叶级数Fourier Series一般形式