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.rhkb.cn/news/387036.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「数组」实现动态数组的功能(C++)

概述 动态数组,顾名思议即可变长度的数组。数组这种数据结构的实现是在栈空间或堆空间申请一段连续的可操作区域。 实现可变长度的动态数组结构,应该有以下操作:申请一段足够长的空间,如果数据的存入导致空间已满,则…

PackagesNotFoundError 错误表明 conda 在当前使用的镜像源中找不到 contourpy 版本 1.2.1。以下是可能的解决方法:

PackagesNotFoundError 错误表明 conda 在当前使用的镜像源中找不到 contourpy 版本 1.2.1。以下是可能的解决方法: PackagesNotFoundError 错误表明 conda 在当前使用的镜像源中找不到 contourpy 版本 1.2.1。以下是可能的解决方法: 1. 更换镜像源 虽…

rust 桌面 sip 软电话(基于tauri 、pjsip库)

本文尝试下rust 的tauri 桌面运用 原因在于体积小 1、pjsip 提供了rust 接口官方的 rust demo 没编译出来 在git找了个sip-phone-rs-master https://github.com/Charles-Schleich/sip-phone-rs 可以自己编译下pjsip lib库替换该项目的lib 2、创建一个tauri demo 引用 [depe…

计算机毕业设计选题推荐-某炼油厂盲板管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

实战:Zookeeper 简介和单点部署ZooKeeper

Zookeeper 简介 ZooKeeper是一个开源的分布式协调服务,它是Apache软件基金会下的一个项目,旨在解决分布式系统中的协调和管理问题。以下是ZooKeeper的详细简介: 一、基本定义 ZooKeeper是一个分布式的、开放源码的分布式应用程序协调服务&a…

SpringBoot的基础配置

目录 SpringBoot快速搭建web程序 第一步:导包 第二步:配置SpringBoot引导类 第三步:编写controller类 第四步:在SpirngBoot引导类中启动项目 起步依赖 SpringBoot基础配置 配置文件格式 yaml语法规则 读取yml配置文件的方…

UE5+OpenCV配置(Windows11系统)

一、概述 因为需要在UE5中使用OpenCV这些工具进行配置,所以在网络上参考借鉴一些资料进行配置。查询到不少的资料,最后将其配置成功。在这里顺便记录一下自己的配置成功的过程。 二、具体过程 (一)版本 使用Windows11系统、UE5.…

ONLYOFFICE 协作空间 2.6 已发布:表单填写房间、LDAP、优化房间和文件管理等

更新后的 ONLYOFFICE 协作空间带来了超过 20 项新功能和优化,让工作更加高效和舒适。阅读本文了解详情。 表单填写房间 这次更新增加了一种新的房间类型,可在 ONLYOFFICE 协作空间中组织简单的表单填写流程。 通过表单填写房间,目前可以完成…

将控制台内容输出到文本文件

示例代码: Imports System.IO Module Module1Sub Main()Dim fs As New FileStream("D:\Desktop\test\输出结果.txt", FileMode.Create, FileAccess.Write, FileShare.None)Dim sw As New StreamWriter(fs)Console.SetOut(sw)Console.SetError(sw)For i …

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第四篇 嵌入式Linux系统移植篇-第六十九章uboot移植

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

移动UI:排行榜单页面如何设计,从这五点入手,附示例。

移动UI的排行榜单页面设计需要考虑以下几个方面: 1. 页面布局: 排行榜单页面的布局应该清晰明了,可以采用列表的形式展示排行榜内容,同时考虑到移动设备的屏幕大小,应该设计合理的滚动和分页机制,确保用户…

在线教育数仓项目(数据采集部分1)

文章目录 数据仓库概念项目需求及架构设计项目需求分析系统数据流程设计框架版本选型集群规模估算集群资源规划设计 数据生成模块目标数据页面事件曝光启动播放错误 数据埋点主流埋点方式(了解)埋点数据上报时机埋点数据日志结构 服务器和JDK准备服务器准…

Linux:shell的基础用法

shell的基础用法 shell变量 Shell 支持以下三种定义变量的方式: valueabcvalue‘abc’value“abc”(注意,赋值号的周围不能有空格) Shell 变量的命名规范 变量名由数字、字母、下划线组成必须以字母或者下划线开头不能使用 Shell 里的关键字&#xff08…

IDEA的pom.xml显示ignored 的解决办法

问题: idea中创建Maven module时,pom.xml出现ignored。 原因: 相同名称的module在之前被创建删除过,IDEA会误以为新的同名文件是之前删除掉的,将这个新的module的pom.xml文件忽略掉显示ignored. 解决: 在…

springboot超市商品管理系统-计算机毕业设计源码55289

摘 要 随着信息技术的快速发展和普及,传统的超市管理模式已经无法满足现代商业的需求。为了提高超市的管理效率,优化商品销售流程,本文提出了一种基于SpringBoot框架的超市商品管理系统。该系统结合了现代软件开发技术,包括MySQL数…

WATLOW Power Series SSR User’s Manual

WATLOW Power Series SSR User’s Manual

【Java】字符串String类(011)

目录 ♦️API和API帮助文档 ♦️创建String 🎏直接赋值类 🎏new类 🐡空参类 构造方法: 举例代码: 🐡有参类 构造方法: 举例代码: 🐡字符数组类 构造方法&…

【C++】类和对象——流插入和流提取运算符重载

目录 前言ostream和istream自定义类型的流插入重载自定义类型的流提取重载解决私有问题日期类总接口 前言 我们在上一节实现日期类时,在输入和输出打印时,经常会调用两个函数: void Insert()//输入函数{cin >> _year;cin >> _mo…

项目比赛经验分享:如何抓住“黄金一分钟”

项目比赛经验分享:如何抓住“黄金一分钟” 前言引起注意:用事实和故事开场明确痛点:描述问题和影响介绍解决方案:简明扼要激发兴趣:使用视觉辅助概述演讲结构:清晰的路线图我的开场白示例结语 前言 在创新的…

(源码分析)springsecurity认证授权

了解 1. 结构总览 SpringSecurity所解决的问题就是安全访问控制,而安全访问控制功能其实就是对所有进入系统的请求进行拦截,校验每个请求是否能够访问它所期望的资源。 根据前边知识的学习,可以通过Filter或AoP等技术来实现,Spr…