当前位置: 首页 > news >正文

powershell@日期和时间命令和对象

文章目录

    • abstract
      • 获取当前日期和时间
      • 格式化日期和时间
      • 日期计算👺
      • 创建自定义日期和时间👺
      • **`[datetime]` 类型**及其构造函数
      • 缺省值
      • 计算日期差异
      • 获取特定部分的日期和时间
      • 比较日期和时间
    • 常用日期操作总结表
    • 时间间隔 TimeSpan 👺
      • 创建TimeSpan对象
        • 1. 使用`New-TimeSpan`命令
        • 2. 使用`[TimeSpan]`
        • 构造函数`new()`
        • 3. 通过字符串解析做类型转换
      • TimeSpan 属性
      • 常用操作
        • 1. 时间间隔相加减
        • 2. 时间间隔比较
        • 3. 转换为字符串
      • 示例总结
    • 用例案例
      • 触发器用例:在特定时间打开notepad
      • 步骤和命令
      • 完整命令示例
      • 注意事项

abstract

  • Get-Date (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Learn

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]> $dt11988年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]::newOverloadDefinitions
    -------------------
    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:ssMM/dd/yyyy HH:mm:ss 等。

方法小结

方法示例代码
[datetime] 类型转换[datetime]$dateString
Get-Date cmdletGet-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:11PS C:\Users\cxxu\Desktop> $time=Get-Date -Minute 52
PS C:\Users\cxxu\Desktop> $time2024年7月30日 20:52:37PS 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.SecondWrite-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 31if ($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对象

  • New-TimeSpan (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Learn
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]::newOverloadDefinitions
-------------------
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 $timeSpanDays              : 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 45if ($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 操作的总结表:

操作示例代码
创建 TimeSpanNew-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。下面是详细的步骤和命令:

步骤和命令

  1. 定义任务动作
    首先,定义任务要执行的动作。在这个例子中,任务动作是打开 Notepad。

    $action = New-ScheduledTaskAction -Execute "notepad.exe"
    
  2. 定义任务触发器
    触发器定义了任务何时执行。在这个例子中,我们设置任务在14:47:11执行。

    # 设定触发时间
    $triggerTime = [datetime]"2024-07-30 20:16:11" #或者:[datetime]"7/30/2024 20:16:11"
    $trigger = New-ScheduledTaskTrigger -Once -At $triggerTime
    
  3. 创建任务
    创建计划任务并将其注册到任务计划程序。

    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"

注意事项

  1. 权限
    创建和注册计划任务通常需要管理员权限。在运行这些命令之前,确保你以管理员身份运行 PowerShell。

  2. 时间格式
    确保时间格式正确,特别是日期和时间的格式要符合 [datetime] 类型的要求。

  3. 检查任务
    你可以使用任务计划程序(Task Scheduler)或 PowerShell 查看和验证创建的任务。例如:

    Get-ScheduledTask -TaskName "OpenNotepadAtSpecificTime"
    
http://www.lryc.cn/news/410322.html

相关文章:

  • 【Golang 面试 - 基础题】每日 5 题(八)
  • LeetCode 算法:在排序数组中查找元素的第一个和最后一个位置 c++
  • 会话存储、本地存储,路由导航守卫、web会话跟踪、JWT生成token、axios请求拦截、响应拦截
  • strcmp库函数原型
  • 在 Vue.js 项目中延迟加载子组件
  • 何时会用到设计模式、七大设计原则介绍
  • 编程语言发展历史:赋值与相等运算符的变迁历程
  • 求职Leetcode题目(2)
  • 深入探索 Postman:使用 API 性能测试优化你的 Web 服务
  • 校车购票小程序的设计
  • 拯救数据危机!2024年最受欢迎的数据恢复软件评测
  • 记一次因为在html两个地方引入vue.js导致组件注入失败的问题
  • Postman中的智慧重试:API测试用例的错误处理与重试逻辑设置
  • docker部署本地词向量模型
  • 接口自动化中对于文件上传的处理方法
  • Java高频面试题分享
  • kvm虚拟化平台部署
  • 利用arthas热更新class文件
  • 天机学堂 第四天 高并发优化总结
  • Canva收购Leonardo.ai,增强生成式AI技术能力
  • 前端练习<HtmlCSS>——照片墙(附完整代码及实现效果)
  • PHP基于微信小程序的打车平台-计算机毕业设计源码78689
  • Vue element ui分页组件示例
  • redis存储结构
  • SQL Server 数据误删的恢复
  • 墨烯的C语言技术栈-C语言基础-018
  • C端与B端 - 第一弹 - 理解和区分C端与B端软件开发
  • 穿越多元宇宙的.NET:一场跨平台的星际旅行
  • Python自学第五天
  • Cookie-Monster:一款针对Web浏览器的安全分析与数据提取工具