繁体   English   中英

PowerShell中日期时间的星期几比较逻辑

[英]Date Time day of the week comparison logic in PowerShell

日期时间对象使我们可以执行以下操作:

$CurrentDate = Get-Date
$TextDate = get-date -date "02/10/2016"

if ($TextDate -lt $CurrentDate){
    Write-Host "True"
}
else {
    Write-Host "False"
}

因为$ TextDate小于$ CurrentDate,所以输出“ True”。

按照相同的逻辑,为什么以下代码输出false?

$CurrentDate = Get-Date -UFormat %V
$TextDate = Get-Date -date "02/10/2016"
$TextDate = Get-Date -date $TextDate -UFormat %V

if ($TextDate -lt $CurrentDate){
    Write-Host "True"
}
else {
    Write-Host "False"
}

唯一的区别是我们正在比较一年中的星期。 如果将比较更改为-gt ,则代码返回True。

因为您正在比较string对象。

(Get-Date -UFormat %V).GetType().FullName
System.String

当使用-gt-lt比较字符串时,它将对字符串进行排序,并且因为6在1后面,因此您的6 -lt 11 -test返回false。

格式化的日期是字符串,而不是整数。 字符串"6"在字符串"11"

这将是最正确的方法:

首先,确定“一年的第一周”的实际含义是:

$CalendarWeekRule = [System.Globalization.CalendarWeekRule]::FirstDay;
#$CalendarWeekRule = [System.Globalization.CalendarWeekRule]::FirstFourDayWeek;
#$CalendarWeekRule = [System.Globalization.CalendarWeekRule]::FirstFullWeek;

然后,确定一周中的哪一天是一周的第一天:

$FirstDayOfWeek = [System.DayOfWeek]::Sunday;
#$FirstDayOfWeek = [System.DayOfWeek]::Monday;
#Any day is available

然后,您可以获得正确的星期数:

$Today = (Get-Date).Date;
$TodayWeek = [cultureinfo]::InvariantCulture.Calendar.GetWeekOfYear($Today, $CalendarWeekRule, $FirstDayOfWeek);

$TargetDate = Get-Date -Date "2016-02-10";
$TargetWeek = [cultureinfo]::InvariantCulture.Calendar.GetWeekOfYear($TargetDate, $CalendarWeekRule, $FirstDayOfWeek);

if ($TargetWeek -lt $TodayWeek) { $true } else { $false }

请注意,如果您想要完整的ISO 8601星期,它会稍微复杂一些

$ TextDate和$ CurrentDate均为[string]类型,因此您要评估的是'6'-lt'11',这将返回false。 运算符基于PowerShell中的左侧类型。 因此,为了强制进行整数比较,请将您的表达式修改为

if ([int]$TextDate -lt $CurrentDate)
{ 
   Write-Host "True" 
} 
else 
{
   Write-Host "False" 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM