如何检查DateTime值是否为空或空?

时间:2017-11-21 17:49:00

标签: powershell datetime

我想检查DateTime字段是不是空的\ null字符串。如果datetime字段不为null,那么我会做的。

[DateTime]$expdate = Read-Host "Expiration Date? MM/DD/YYYY"
$newexpdate = $expdate.AddDays(1)
if (!([DateTime]$expdate -eq "")) {
    Write-Host -ForegroundColor Green $($newexpdate) "Date Time entered"
}

这是我的错误消息:

Cannot convert value "" to type "System.DateTime". Error: "String was not
recognized as a valid DateTime."
At line:1 char:2
+     [DateTime]$expdate = Read-Host "Expiration Date? MM/DD/YYYY"
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
    + FullyQualifiedErrorId : RuntimeException`

我该怎么做才能检查某个字段是不是字符串但是DateTime对象?

2 个答案:

答案 0 :(得分:2)

为什么在为函数或脚本声明强制DateTime - 类型参数时提示用户输入?如果缺少该参数,PowerShell将提示用户输入日期和时间,用户可以在运行时输入该参数。 (如果使用Read-Host,则无法自动执行。)

答案 1 :(得分:-1)

你的逻辑没有多大意义,但这就是我想要做的你想要做的事情(下图)。要直接解决上一个问题,您可以使用-is-isNot运算符测试对象的类型,该运算符将根据匹配项返回$True \ $False。运算符的另一侧可以是字符串或类型加速器,即[DateTime]'10/10/2010' -is 'DateTime'[DateTime]'10/10/2010' -is [DateTime]都评估为$True

Do
{
    $ExpDate = Read-Host -Prompt 'Expiration date? MM/DD/YYYY'
} Until ($ExpDate -match '\d{1,2}\/\d{1,2}\/\d{2,4}')

$NewExpDate = ([DateTime]$ExpDate).AddDays(1)

If ($ExpDate)
{
    Write-Host "$NewExpDate Date Time entered." -ForegroundColor 'Green'
}