powershell - 将时间(小时和分钟)插入日期时间对象
问题描述
我有一个脚本,它接受开始日期和开始时间作为单独的参数。如果没有提供开始日期,我假设他们希望日期是今天,如果没有开始时间,我想假设它应该是“无论现在是什么时间”。
我不想(太多)限制用户输入日期或时间的方式。例如,我希望他们能够输入 do-StartDate (Get-Date)
所以我需要能够接受该对象(包括时间),然后,由于没有输入 StartTime,我需要将对象上的任何时间替换为当前时间。
我想过说如果$StartDate
变量中有时间,那么使用它,但如果他们这样做-StartDate 07/10/2018
,那么我仍然需要添加时间。
经过一番搜索,这是我尝试的结果:
PS C:\> Get-Date
Tuesday, July 10, 2018 3:15:58 PM
PS C:\> $StartDate = (Get-Date).AddDays(1)
>> $StartTime = [DateTime]::ParseExact((Get-Date -Format HH:mm).ToString(),"HH:mm",[System.Globalization.CultureInfo]::InvariantCulture)
>> [datetime]$StartDate = $StartDate
>> $StartDate = $StartDate.Add([System.Timespan]::Parse($StartTime))
>> $StartDate
Exception calling "Parse" with "1" argument(s): "String was not recognized as a valid TimeSpan."
At line:4 char:1
+ $StartDate = $StartDate.Add([System.Timespan]::Parse($StartTime))
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FormatException
Wednesday, July 11, 2018 3:16:10 PM
所以,我认为问题是,“我如何花费特定时间并将其插入到 datetime 对象中?” 或者也许有更好的方法来实现我的目标,这也很酷。
谢谢。
解决方案
您始终可以通过 的相应参数构造日期Get-Date
,例如
Get-Date -Hour 8 -Minute 30
会给你今天的日期,时间是 8:30。
您也可以只DateTime
取值的日期部分,如下所示:
$today = (Get-Date).Date
加几天(或只加几天)
$tomorrow = $today.AddDays(1)
然后添加所需的时间跨度:
$time = New-Timespan -Hour 8 -Minute 30
$tomorrow.Add($time)
也可以菊花链式连接:
$time = New-Timespan -Hour 8 -Minute 30
(Get-Date).Date.AddDays(1).Add($time)
在您的特定场景中,您可以将开始日期作为一个DateTime
值,去掉时间,然后添加时间跨度,例如从字符串参数:
Param(
[Parameter(Mandatory=$true)]
[DateTime]$StartDate,
[Parameter(Mandatory=$true)]
[String]$StartTime
)
$StartDate.Date.Add([Timespan]::Parse($StartTime))
并像这样调用它:
foo -StartDate (Get-Date) -StartTime '8:30'
或者你会为小时和分钟使用不同的参数:
Param(
[Parameter(Mandatory=$true)]
[DateTime]$StartDate,
[Parameter(Mandatory=$true)]
[ValidateRange(0,23)]
[Integer]$Hour,
[Parameter(Mandatory=$false)]
[ValidateRange(0,59)]
[Integer]$Minute = 0
)
$StartDate.Date.Add((New-Timespan -Hour $Hour -Minute $Minute))
并像这样调用脚本/函数:
foo -StartDate (Get-Date) -Hour 8 -Minute 30
推荐阅读
- swift - 从另一个 View Controller 访问页面控制以转发页面
- docusignapi - 根据用户选择添加或合并另一个文档或模板
- python - 使用许多独特的 Tensorflow 神经网络处理分类特征
- sql - 如何根据给出的日期时间从数据库中获取数据?
- cookies - testcafe cookie 会话cookie
- laravel - 如何在 Eloquent ORM 中的连接表上进行选择
- laravel - vue包版本不匹配
- audio - 带手刹的多个音轨
- javascript - 使用 NGRX 存储测试异步 Angular 验证器
- php - PHP从数组中删除所有对象,但一个具有相同属性的对象