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

news2024/9/9 4:05:37

文章目录

    • 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]> $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: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: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对象

  • 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]::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 操作的总结表:

操作示例代码
创建 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.coloradmin.cn/o/1960941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QChart笔记6:显示点的值、显示点坐标值

在QChart笔记2: 添加鼠标悬停显示和格式处理_qchart 折线图 响应鼠标显示数据-CSDN博客上修改而来。 在笔记2中,通过鼠标悬停的方式显示了坐标轴Y的值,如果要一直显示应该怎么写呢?比如要达到下面的效果。 核心是这句: series1-…

Windows10安装——制作U盘启动盘(保姆级)

安装前准备: 一个不少于8G的U盘, 一个可以上网的windows电脑; 第一步:安装启动盘制作工具 首先我们下载启动盘制作工具, 官网网址:下载 Windows 10 (microsoft.com); 百度网盘下载&#xf…

赛氪网受邀参加中国国际科技促进会第五届第五次常务理事扩大会议

2024年7月27日,环球赛乐(北京)科技有限公司(以下简称“赛氪网”)受邀参加了中国国际科技促进会第五届第五次常务理事扩大会议。此次会议汇聚了众多科技界的精英和专家,共同探讨科技发展的新方向&#xff0c…

【Mybatis】xml 配置文件

Mybatis的开发有两种方式: 注解XML 使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能。 如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。在Mybatis中使用XML映射文件方式开…

Cxx primer-chap10-Generic Algorithms

generic algorithms的解释:,具体而言iterator使得算法与容器类型无关:,但算法的实现成功与否有时依赖于(element type)元素类型:通用算法的实现依赖于iterator,具体而言algorithm –…

python windows环境部署

在官网安装www.python.org linux系统的只能编译安装 windows的可以直接安装 这里是windows安装 .3.9.6版本 一直下一步就可以,然后鼠标右键在按住shift用终端打开 输入py或者python验证一下是否安装成功 打开目录文件夹 在里面新建一下pip的文件夹,里…

OpenAI开发了一种新方法来教授AI模型与安全政策保持一致

OpenAI 宣布了一种新的方法来教授人工智能模型与安全政策保持一致,这种方法被称为"基于规则的奖励"(Rules Based Rewards)。据 OpenAI 安全系统负责人 Lilian Weng 介绍,基于规则的奖励(RBR)可以…

【研发日记】Matlab/Simulink技能解锁(十一)——Stateflow中的en、du、ex应用对比

文章目录 前言 项目背景 en类型 du类型 ex类型 组合类型 分析和应用 总结 参考资料 前言 见《【研发日记】Matlab/Simulink技能解锁(六)——六种Simulink模型架构》 见《【研发日记】Matlab/Simulink技能解锁(七)——两种复数移相算法》 见《【研发日记】Matlab/Simul…

盘点适合新手使用的4个剪辑工具。

很多宝子们都觉得剪辑很难,想学习又觉得自己没有专业的剪辑知识指导,不好上手。那是因为不知道有这些工具,这4款专业的剪辑软件对新手来说简直就是福音。 1、福昕剪辑 直达链接:www.pdf365.cn/foxit-clip/ 这个软件的界面设置的…

cGDB 调试方法

用法总结 Ubuntu系统,安装cGDB sudo apt updatesudo apt install cgdb 编译代码 g -g -o example example.cpp -lpthread要确保有 -g ,代码是调试信息编译的 启动测试:cgdb ./可执行文件 此处可以使用esc进入命令模式,vim命令上下…

生活方式酒店升势迅起,喆啡酒店缘何成为投资热点?

伴随国内消费结构转型升级,旅游需求持续增加。文旅部发布的《国内旅游提升计划(2023—2025年)》提出,需丰富优质旅游供给,并进一步提高消费者体验及满意度,这将为酒店行业带来更广阔的客源和更高的质量要求…

SpringBoot上传超大文件导致OOM,完美解决办法

问题描述 上传大文件报错: Caused by: java.lang.OutOfMemoryError at java.io.ByteArrayOutputStream.hugeCapacity(ByteArrayOutputStream.java:123) ~[?:1.8.0_381] at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:117) ~[?:1.8.0_381] …

探索Axure在数据可视化原型设计中的无限可能

在当今数字化浪潮中,产品设计不仅关乎美观与功能的平衡,更在于如何高效、直观地传达复杂的数据信息。Axure RP,作为原型设计领域的佼佼者,其在数据可视化原型设计中的应用,正逐步揭开产品设计的新篇章。本文将从多个维…

同声翻译怎么做?其实有这几种方法

同声翻译怎么做?同声翻译(Simultaneous Interpretation)是指在说话人讲话的同时,翻译人员即时将内容转换成另一种语言的过程。随着全球化的发展和技术的进步,同声翻译已成为跨文化交流的重要工具。那么,今天…

stl-priority_queue 优先队列

目录 ​编辑优先队列 头文件:#include《queue》;即可 访问:只能访问队首.top() 添加。push(元素),按优先级排列 删除。pop(),删除队首元素(堆顶&#xff…

嵌入式初学-C语言-八

#接嵌入式初学-C语言-七# 分支结构 分支结构&#xff1a;又被称之为选择结构 选择结构的形式 多分支 语法&#xff1a; if(条件1) { 语句1; } else if(条件2) { 语句2; } ... else { 语句n1; }案例&#xff1a; #include <stdio.h> int main() { // 需求&#xff…

采购订单打开单据时表格行设置颜色

文章目录 采购订单打开单据时表格行根据条件显示背景色Python实现插件实现创建项目创建类&#xff0c;实现接口重写方法编译后挂载插件到表单插件启动开发环境进行测试单元格设置背景色行背景色 采购订单打开单据时表格行根据条件显示背景色 Python实现 import clr clr.AddR…

VitualBox虚拟机重启后配置无法保存,已安装软件变为没有安装

VitualBox虚拟机重启后虚拟机还原为上次开机的状态&#xff0c;安装的安装包配置啥的全部丢失。 按网上的配置了半天也没解决。最终用下面讨巧的办法&#xff0c;即不重启虚拟机。 我们不在重启虚拟机&#xff0c;那我们想关闭虚拟机的时候怎么办呢&#xff1f; 1、按下图所…

104 二叉树的最大深度

解题思路&#xff1a; \qquad 最大深度可以想到使用DFS(深度优先)或BFS(广度优先)来解决。 \qquad DFS&#xff1a;一般用 递归 or 迭代栈。递归实现较为简单。 \qquad BFS&#xff1a;一般用 迭代队列。 DFS&#xff1a; \qquad 对于每个节点&#xff0c;将左子树的最大深…