当前位置: 首页 > 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"
    

相关文章:

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

文章目录 abstract获取当前日期和时间格式化日期和时间日期计算👺创建自定义日期和时间👺**[datetime] 类型**及其构造函数缺省值计算日期差异获取特定部分的日期和时间比较日期和时间 常用日期操作总结表时间间隔 TimeSpan 👺创建TimeSpan对…...

【Golang 面试 - 基础题】每日 5 题(八)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...

LeetCode 算法:在排序数组中查找元素的第一个和最后一个位置 c++

原题链接🔗:在排序数组中查找元素的第一个和最后一个位置 难度:中等⭐️⭐️ 题目 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标…...

会话存储、本地存储,路由导航守卫、web会话跟踪、JWT生成token、axios请求拦截、响应拦截

1、会话存储、本地存储 前端浏览器中存储用户信息,会话存储、本地存储、cookie 会话存储(sessionStorage):会话期间存储,关闭浏览器后,数据就会销毁 sessionStorage.setItem("account",resp.d…...

strcmp库函数原型

int strcmp(const char *str1, const char *str2) {unsigned const char *s1 (unsigned const char *) str1;unsigned const char *s2 (unsigned const char *) str2;while (*s1 && *s1 *s2) {s1;s2;}return *s1 - *s2; }while (*s1 && *s1 *s2) 一直循环&…...

在 Vue.js 项目中延迟加载子组件

在 Vue.js 中,当父组件渲染时,子组件的生命周期钩子函数会立即执行,即使这些子组件并未显示。这是因为 Vue.js 会在渲染父组件时实例化所有引用的子组件。为了避免不必要的函数执行,我们可以通过使用 v-if 指令和异步组件延迟加载…...

何时会用到设计模式、七大设计原则介绍

以下关于b站尚硅谷相关设计模式视频的总结 设计模式的重要性: 代码重用性(相同的代码,不用编写很多次)、 可读性(编程规范,便于其他程序员阅读和理解)、 可扩展性(增加新功能时&am…...

编程语言发展历史:赋值与相等运算符的变迁历程

本文摘取自笔者书稿《编程语言发展历史》 赋值运算符是编程语言最基础的运算符,其发展历史也非常有趣。最早的赋值语句就是使用等号“”来表示,一些语言为了让赋值运算在数学形式上更加严谨(形如“x x 1”的表达式在数学上不成立&#xff0…...

求职Leetcode题目(2)

1.柱状图中最大的矩形 据说这是2024年字节二面的题目,我感觉这道题跟接雨水有点类似,最重要的思路还是要找到什么时候能形成矩形的这么个情况,某个范围的矩形的高度,是由最短的柱形来决定的。 我们先整理一下,解决这道…...

深入探索 Postman:使用 API 性能测试优化你的 Web 服务

引言 在当今快速发展的互联网时代,Web 服务的性能至关重要。API 作为服务之间的桥梁,其性能直接影响到整个应用的响应速度和用户体验。Postman,作为一个多功能的 API 开发工具,提供了强大的性能测试功能,帮助开发者评…...

校车购票小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,我的乘车信息管理,车辆信息管理,座位管理,系统管理 微信端账号功能包括:系统首页,车辆信息,我的 开发系统…...

拯救数据危机!2024年最受欢迎的数据恢复软件评测

现在大家快速传输资料的方式都变成了电子档,有些数据是存储在电脑上,有些存储在手机,有的存储在U盘甚至其他一些电子设备上。电子设备存储数据方便,丢失数据也总在意料之外。很多时候我们多学会一个工具,比如转转大师数…...

记一次因为在html两个地方引入vue.js导致组件注入失败的问题

这个问题我遇到两次了,是在恼火,不对,三次了,我如果不做这个笔记,我确定我还会遇到第三次。 尾部这个去掉就行 因为头部有了 遇到这种bu g好恼火,解决了又怎么样呢?重蹈覆辙的滋味不好受...

Postman中的智慧重试:API测试用例的错误处理与重试逻辑设置

Postman中的智慧重试:API测试用例的错误处理与重试逻辑设置 在API测试过程中,错误处理和重试逻辑是确保测试准确性和可靠性的重要环节。Postman提供了多种功能来处理测试中可能出现的错误,并允许自定义重试逻辑以适应不同的测试场景。本文将…...

docker部署本地词向量模型

开源项目:GitHub - huggingface/text-embeddings-inference: A blazing fast inference solution for text embeddings models 1. 下载词向量模型 参考我的另一篇博客:langchain 加载本地词向量模型 2. 部署词向量模型 就三行命令 model/data/BAAI/…...

接口自动化中对于文件上传的处理方法

正常的接口自动化基本都是json的格式,对于文件上传是一种特殊的格式是表单格式针对这种表单格式在接口自动化中怎么处理,主要通过工作中使用的一个实际的例子进行分享 举例:web上需要导入一个文件实现相关的功能,主要通过两个接口…...

Java高频面试题分享

文章目录 1. 策略模式怎么控制策略的选取1.1 追问:如果有100种策略呢?1.2 追问:什么情况下初始化Map 2. 什么是索引?什么时候用索引?2.1 追问:怎么判断系统什么时候用量比较少2.2 追问:如何实时…...

kvm虚拟化平台部署

kvm虚拟化平台部署 kvm概念简介 kvm自linux2.6版本以后就整合到内核中,因此可以看做是一个原生架构. kvm虚拟化架构 硬件底层提供物理层面的硬件支持 linux(host),就相当于这个架构中的宿主机,上面运行了多个虚拟机。…...

利用arthas热更新class文件

利用arthas热更新class文件 背景:发现一个bug,家里难以复现,需要在现场环境更新几行代码验证。 arthas-boot version: 3.7.1 java -jar arthas-boot.jar启动arthas 1、利用arthas的sc命令查找确定类名称 sc com.**2、反编译为java文件 …...

天机学堂 第四天 高并发优化总结

前端每隔15秒就发起一次请求,将播放记录写入数据库。 但问题是,提交播放记录的业务太复杂了,其中涉及到大量的数据库操作: 如何进行优化 单机并发能力 变同步为异步 合并写请求 提高单机并发:优化SQL,尽…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...